1. 程式人生 > >MYSQL主從庫搭建(原創)

MYSQL主從庫搭建(原創)

主從庫配置

MYSQL主從庫搭建(原創)

一、 單主庫配置
1.1環境說明
本節講述的環境為一個主庫,兩個從庫,具體環境如下。
1.1.1Linux version
Red Hat Enterprise Linux Server release 6.4 (Santiago)
1.1.2 mysql version
5.1.73
1.1.3 master 服務器ip 192.168.212.134, slaver 服務器IP 192.168.212.142 ,slaver 服務器IP 192.168.212.143

1.2 master 服務器配置
1.2.1 創建同步賬號

mysql> grant replication slave on . to ‘rep‘@‘192.168.212.%‘ identified by ‘rep‘;
mysql> flush privileges;
說明: . 代表所有的數據庫的所有表,也可指定對某個數據庫的所有表進行同步,例如testdb.*
192.168.212.%代表對192.168.212網段都可以連接master 數據庫
1.2.2 打開master 數據庫的binlog功能
編輯/etc/my.cng
在mysqld模塊中添加bin-log參數。例如bin-log=master
重啟數據庫
#service mysqld restart
1.2.3 備份數據庫
? 為了保持一致性,檢查binlog。
mysql>show master status;
當前的語句節點在mysqlbin.000002 ,位置在106,這個在slaver數據庫中恢復起始位置
mysql>show master logs;

? 備份全庫
為了保持數據一致,對於非innodb的庫表需要鎖庫進行備份,可以通過mysql命令mysql>flush table with read lock;鎖數據庫(unlock tables;解鎖),此命令鎖表的時間是通過系統參數wait_time和interactive_timeout控制,缺省時間是28800秒。如果此命令執行窗口關閉,鎖表也失效。

也可以在mysqldump中加參數-x鎖表,如下命令# mysqldump -uroot -B -A -x --events –master-data=2|gzip >/root/mysql_all.gz
對於innodb存儲引擎的表可以在mysqldump中加參數--single-transaction在備份時快照來保持數據一致,如下命令# mysqldump -uroot -B -A --single-transaction --events --master-data=2|gzip >/root/mysql_all.gz
將備份文件傳至slaver 服務器,如下:
Scp /root/mysql_all.gz [email protected]:/home/mysql/

1.3 Slaver 服務器配置
本部分只對192.168.212.142進行配置,192.168.212.143配置與此相同。
1.3.1 將備份數據導入數據庫,如下:
$gzip –dv /root/mysql_all.gz
$mysql –uroot </root/mysql_all
1.3.2 設置恢復點
Mysql>change master to
master_host=‘192.168.212.134‘,
master_port=3306,
master_user=‘rep‘,
master_password=‘rep‘,
master_log_file=‘mysqlbin.000002‘,
master_log_pos=106;
說明:
把備份文件中change master 命令master_log_file,master_log_pos值填入以上命令對應位置。如果備份時設置--master-data=1(2會把增量位置信息註釋),增量位置信息會寫入備份文件,備份文件導入從數據庫時就會把位置信息一起導入,這樣在從庫執行change master 時就不再需要寫master_log_file和master_log_pos。
1.3.3 啟動同步
Mysql>start slave;
1.3.4 檢查主從狀態
Mysql>show slave status\G;
mysql> show slave status\G;
1. row
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.212.134
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysqlbin.000004
Read_Master_Log_Pos: 106
Relay_Log_File: mysqld-relay-bin.000004
Relay_Log_Pos: 250
Relay_Master_Log_File: mysqlbin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 106
Relay_Log_Space: 550
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
1 row in set (0.00 sec)
ERROR:
No query specified
說明:如果Slave_IO_Running和 Slave_SQL_Running都是yes 說明開始同步,Seconds_Behind_Master說明從庫落後主庫的時間(秒)。

二、多主庫配置
多主庫模式包含超過一個以上的主庫,主庫間數據庫互相同步。Master1、Master2 分別代表兩個主庫。
2.1 參數配置
Mater1:
auto_increment_offset=1 #解決主鍵自增變量沖突.自增初始位置,此例為1
auto_increment_increment=2 #解決主鍵自增變量沖突.自增間隔為2,例如1、3、5
log_slave_updates
Mater2:
auto_increment_offset=2 #解決主鍵自增變量沖突。自增初始位置,此例為2
auto_increment_increment=2 #解決主鍵自增變量沖突。自增間隔為2,例如2、4、6
log_slave_updates

2.2 把master1的數據備份,導入mater2數據庫
參照單主庫的備份與導入章節。

2.3 master1啟動同步
Mysql> change master to
master_host=‘192.168.212.141‘,
master_port=3306,
master_user=‘rep‘,
master_password=‘rep‘;
mysql>start slave;

2.4 master2啟動同步
Mysql> change master to
master_host=‘192.168.212.141‘,
master_port=3306,
master_user=‘rep‘,
master_password=‘rep‘;
mysql>start slave;

三、Binlog日誌的自動刪除
可以通過系統參數expire_logs_days配置Binlog日誌保留天數。此參數默認值為0,
例如expire_logs_days=10 ,表示保留10天。

四、讀寫分離
為了防止應用對從庫進行DML操作而參數主從不一致,可以在從庫添加read-only參數,使從庫只讀(super,或all privileges權限用戶不受此限制)。

五、從庫切換為新主庫
5.1選擇同步最新的從庫為新主庫。
5.1.1 查看各從庫如果如下紅框顯示說明同步一致。

5.1.2 查看兩臺從庫的master.info文件,對比不同從庫紅色部分判斷是否最新,選擇logbin file和pos最大的為最新,此例為logbinfile:000006,pos:106。
#cat master.info
15
mysqlbin.000006
106
192.168.212.134
rep
rep
3306
60
0
5.2 把所有從庫relaylog內容都導入庫中。
在每個從庫執行stop slave io_thread;show processlist\G;直到看到Has read all relay log;表示從庫導入完畢。
mysql> stop slave io_thread;
mysql> show processlist\G

5.3 新主庫操作

          新主庫的檢查

? 在新主機的數據目錄下,刪除master.info,relay-log.info 兩個文件。
? 確認mysql.user表滿足應用和其它從庫的連接需求。
? 確認去掉了read-only、log_slave_updates系統參數。
? 確認打開了binlog功能。
? 檢查原主庫是否還有沒同步到新主庫的binlog,不沒同步到新從庫的binlog通過mysqlbinlog工具生成可讀命令文檔,導入新主庫。

在同步最新的從庫上執行如下語句,把此從庫改成新主庫,語句如下。
Mysql>stop slave; --停止slave服務
Mysql>reset master; --進行主庫binlog初始化工作
#service mysqld restart 重啟數據庫
5.4 其它從庫操作
Mysql>stop slave;
Mysql>change master to master host=’192.168.212.142’; --指向新主庫
Mysql>start slave;
Mysql>show slave status\G;

MYSQL主從庫搭建(原創)