共計 6280 個字符,預計需要花費 16 分鐘才能閱讀完成。
這篇文章主要講解了“MYSQL 主從搭建的方法是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“MYSQL 主從搭建的方法是什么”吧!
一、MySQL 主從復制搭建
MySQL 主從復制搭建主要步驟有:安裝 mysql 軟件、Master 端配置部署、Slave 端配置部署、建立主從同步
1、 安裝 MYSQL
a、環境準備及軟件安裝
應用需求:
雙機熱備提供備份,冗余功能
安裝環境:
NODE1 主機名 master IP 地址 192.168.159.128
NODE2 主機名 slave IP 地址 192.168.159.129
VIA IP(漂移 IP)10.10.10.100
NODE1 為主節點,NODE2 為從節點,同步的數據庫名 fire9
在安裝之前請確認下面的安裝包不存在
rpm -e mysql-devel-4.1.20-1.RHEL4.1
rpm -e mysql-bench-4.1.20-1.RHEL4.1
rpm -e php-mysql-4.3.9-3.15
rpm -e libdbi-dbd-mysql-0.6.5-10.RHEL4.1
rpm -e mod_auth_mysql-2.6.1-2.2
rpm -e mysql-server-4.1.20-1.RHEL4.1
rpm -e MySQL-python-1.0.0-1.RHEL4.1.i386
rpm -e MyODBC-2.50.39-21.RHEL4.1.i386
rpm -e qt-MySQL-3.3.3-9.3.i386
rpm -e mysqlclient10-devel-3.23.58-4.RHEL4.1.i386
rpm -e mysqlclient10-3.23.58-4.RHEL4.1
rpm -e cyrus-sasl-sql-2.1.19-5.EL4.i386
rpm -e perl-DBD-MySQL-2.9004-3.1.i386
rpm -e mysql-4.1.20-1.RHEL4.1
安裝準備:我已經把相關的軟件和配置文件都放在工具包里面了
redhat as 4 update4 32 位
mysql-5.0.45-linux-i686-icc-glibc23.tar.gz
libnet-1.1.2.1-1.rh.el.um.1.i386.rpm
heartbeat-pils-2.0.4-1.el4.i386.rpm
heartbeat-stonith-2.0.4-1.el4.i386.rpm
heartbeat-2.0.4-1.el4.i386
perl-5.8.8.tar.gz
DBI-1.59.tar.gz
DBD-mysql-4.005.tar.gz
Time-HiRes-01.20.tar.gz
Period-1.20.tar.gz
Convert-BER-1.31.tar.gz
Mon-0.11.tar.gz
mon-0.99.3-47.tar.gz
b、安裝 MYSQL 主從都要進行安裝
# tar zxvf mysql-5.0.45-linux-i686-icc-glibc23.tar.gz -C /usr/local/
# cd /usr/local/
# mv mysql-5.0.45-linux-i686-icc-glibc23 mysql
# cd mysql
# groupadd mysql
# useradd -g mysql mysql
#passwd mysql
# ./scripts/mysql_install_db –user=mysql
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
# chmod +x /etc/rc.d/init.d/mysqld
# chkconfig –add mysqld
# /etc/rc.d/init.d/mysqld start
注:主從都使用 yum install 的方式安裝系統自帶的 mysql 也可以使用,只是版本會比較低
2、 Master 端配置部署
a、 在主服務器上的 my.cnf 配置文件中的 [mysqld] 節點下添加以下配置
黃色部分為新添加
vi /etc/my.cnf
[mysqld]
server-id=101
log-bin=/var/lib/mysql/mysql-bin.log
log-bin-index=/var/lib/mysql/mysql-bin.index
expire_logs_days=30
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
說明:
log-bin :給出二進制日志的所有文件基礎名
log-bin-index :給出二進制日志文件的文件名,通常以 000001 開始,順序遞增。全名:master-bin.000001
server-id :mysql 服務器唯一 ID,在主從復制的所有服務器中必須唯一。
b、 創建用戶,并賦予權限:
create user repl_user;
GRANT REPLICATION SLAVE ON *.* TO repl @ % IDENTIFIED BY PASSWORD ******
設置密碼時會遇到報錯:
ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number
解決辦法:用 select password(你想輸入的密碼 查詢出你的密碼對應的字符串
select password(123456
查出的是 *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
GRANT REPLICATION SLAVE ON *.* TO repl_user @ % IDENTIFIED BY PASSWORD *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
2、Slave 端配置部署
a、配置參數:[mysqld]
黃色部分為新添加
vi /etc/my.cnf
[mysqld]
server-id=102
log-bin=/var/lib/mysql/mysql-relay-bin.log
log-bin-index=/var/lib/mysql/mysql-relay-bin.index
relay_log_purge=on
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
3、建立主從同步
(重建備庫也是使用該方法)
建立主從同步可以從主庫上導出數據,也可以從已有的從庫上導出數據,然后再導入到新的從庫中,change master to 建立同步。
3.1、導出數據
在主庫上導出數據:
mysqldump -u***-p***-S /data/mysql6001/mysql.sock –default-character-set=utf8 –q –single-transaction –master-data-A /tmp/all_database.sql
(或者)在從庫上導出數據:
mysqldump -u***-p***-S /data/mysql6001/mysql.sock –default-character-set=utf8 -q –single-transaction –dump-slave-A /tmp/all_database.sql
NOTES:
–master-data 和 –dump-slave 導出的備份中,會包含 master_log_file 和 master_log_pos 信息。
例子:
mysqldump -uroot –events –all-databases /opt/mysql.dump
3.2、從庫導入數據
mysql -u*** -p*** –default-character-set=utf8 all_database.sql
例子:
mysql -uroot mysql.dump /mysql.dump
3.3、從庫與主機建立同步
以下為建立主從同步最基本的 6 個項:change master to
master_host= xxx.xxx.xxx.xxx , # 主庫 IP
master_port=6001, # 主庫 mysqld 的端口
master_user= repl , # 主庫中創建的有 REPLICATION SLAVE 權限的用戶
master_password= xxxxxxxx , # 該用戶的密碼
master_log_file= mysql-bin.000xxx , # 已在導入時指定了
master_log_pos=xxxxxx; #已在導入時指定了
start slave;
例子:
master_log_file 和 master_log_pos 通過在主庫上使用命令獲得:
show master status \G;
在從庫上執行:
change master to
master_host= 192.168.159.128 ,
master_port=3306,
master_user= repl_user ,
master_password= 123456 ,
master_log_file= mysql-bin.000001 ,
master_log_pos=1071;
start slave;
二、主從復制狀態檢查及異常處理
1、主從復制狀態檢查
主庫查看 show master status\G
File: mysql-bin.000303
Binlog_Do_DB:
show master status\G
Position: 18711563
從庫:
Master_Log_File: mysql-bin.000303–IO_threadRead_Master_Log_Pos: 18711563–IO_threadRelay_Master_Log_File: mysql-bin.000303–sql_threadExec_Master_Log_Pos: 18711163–sql_thread span =
b、通過 show slave status\G 查看錯誤信息:show slave status\G
Last_SQL_Errno: 1062
Last_SQL_Error: Error Duplicate entry 1 for key PRIMARY on query. Default database:
test . Query: insert into test values(1,2,3,4,5,6)
c、通過錯誤日志查看錯誤信息:
140828 16:27:51 [ERROR] Slave SQL: Error Duplicate entry 1 for key PRIMARY on query.
Default database: test . Query: insert into test values(1,2,3,4,5,6) ,
Error_code: 1062
140828 16:27:51 [Warning] Slave: Duplicate entry 1 for key PRIMARY Error_code: 1062
140828 16:27:51 [ERROR] Error running query, slave SQL thread aborted. Fix the problem,
and restart the slave SQL thread with SLAVE START . We stopped at log
mysql-bin.000303 position 18711163
根據這些報錯信息,往往就能夠定位到發生異常的原因。如果我們了解產生異常的具體事件,而且能夠掌控,可以通過設置 sql_slave_skip_counter 參數來跳過當前錯誤。set global sql_slave_skip_counter=1;
a、直接 set global sql_slave_skip_counter=n;(n 設置很大的值,即:跳過所有錯誤),
b、設置 slave_skip_errors=all; 跳過所有類型的錯誤
c、直接查看主庫的 binlog,然后在從庫上直接執行 change master to。
這些方法都會導致主從數據不一致。
如果發現從庫與主庫差異太大,無法通過手動操作或數據修改重新建立同步。可以參考上述 MySQL 主從復制搭建 重新搭建從庫。
4、主從復制延遲
主從復制延遲,可能的原因有:
a、主從同步延遲與系統時間的關系,查看主從兩臺機器間系統時間差
b、主從同步延遲與壓力、網絡、機器性能的關系,查看從庫的 io,cpu,mem 及網絡壓力
c、主從同步延遲與 lock 鎖的關系(myisam 表讀時會堵塞寫),盡量避免使用 myisam 表。一個實例里面盡量減少數據庫的數量。
d、主從復制發生異常而中斷,過很久之后才發現復制異常。可通過查看 master 與 slave 的 status 估算相差的日志。如果相差太大,則可以考慮重做從庫。
5、MYSQL 啟動報錯
MYSQL 啟動時報錯:
Another MySQL daemon already running with the same unix socket
原因多個 Mysql 進程使用了同一個 socket。
兩個方法解決:
第一個是立即關機 使用命令 shutdown -h now 關機,關機后在啟動,進程就停止了。
第二個直接把 mysql.sock 文件改名即可。也可以刪除,推薦改名。
然后就可以啟動 mysql 了。
6、ERROR-2013 報錯
ERROR-2013 報錯代碼,可能造成的原因是
[ERROR] Slave I/O: error connecting to master repl_user@192.168.159.128:3306 – retry-time: 60 retries: 86400, Error_code: 2013
iptables -F
setenforce 0
7、ERROR-1045 報錯
Last_IO_Errno: 1045
Last_IO_Error: error connecting to master repl_user@192.168.159.128:3306 – retry-time: 60 retries: 86400
必須使用以下方法授權
select password(123456
GRANT REPLICATION SLAVE ON *.* TO repl_user @ % IDENTIFIED BY PASSWORD *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
感謝各位的閱讀,以上就是“MYSQL 主從搭建的方法是什么”的內容了,經過本文的學習后,相信大家對 MYSQL 主從搭建的方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關知識點的文章,歡迎關注!