1. 程式人生 > >mysql主從復制筆記

mysql主從復制筆記

賬號 add syn 主從服務器 應用 服務 fat rest date

一:測試環境介紹

主從復制測試環境是ubuntu+mysql5.7,master服務器ip是192.168.71.135,slave服務器ip是192.168.71.137,ubuntu環境是從一臺已配置好環境的服務器克隆的。

二:mysql主從配置

1:) master配置

a 在mysql 目錄下(/etc/mysql),mysql.cnf文件中添加server-id和Log-bin.主從服務器的server-id不能相同

log-bin=mysql-bin

server-id=100

技術分享

設置好後,使用show master status;查詢一下狀態

技術分享

設置從服務器連接的賬號,密碼等

配置連接用戶

GRANT REPLICATION SLAVE ON *.* to ‘mysql賬號‘@‘%‘ identified by ‘密碼‘;這裏是測試,沒有指定從服務器的ip.如需指定ip,執行下面一個指令

GRANT REPLICATION SLAVE ON *.* to ‘mysql賬號‘@‘192.168.71.137‘ identified by ‘密碼‘;

配置好後記錄重啟mysql.

2:)配置從數據庫

2.1 Slave的配置與master類似(配置文件名稱:mysql.cnf,在/etc/mysql目錄,你的環境可能不是該目錄),你配置完成後仍然需要重啟slaveMySQL

。配置參數如下:
log_bin= mysql-bin
server_id= 110
relay_log=mysql-relay-bin
log_slave_updates=1
read_only=1
server_id是必須的,而且唯一。slave沒有必要開啟二進制日誌,但是在一些情況下,必須設置,例如,如果slave為其它slavemaster,必須設置bin_log。在這裏,我們開啟了二進制日誌,而且顯示的命名(默認名稱為hostname,但是,如果hostname改變則會出現問題)
relay_log配置中繼日誌,log_slave_updates表示slave將復制事件寫進自己的二進制日誌(後面會看到它的用處
)
有些人開啟了slave的二進制日誌,卻沒有設置log_slave_updates,然後查看slave的數據是否改變,這是一種錯誤的配置。所以,盡量使用read_only,它防止改變數據(除了特殊的線程)。但是,read_only並是很實用,特別是那些需要在slave上創建表的應用。

2.2 配置完成後重新啟動mysql

/etc/init.d/mysql restart

2.3 執行同步SQL語句

mysql> change master to
master_host=’192.168.71.135’,
master_user=’syncuser’,
master_password=’123456’,
master_log_file=’mysql-bin.000001’, -- 該值來源於主庫,執行show master status 後的File字段
master_log_pos=443;-- 該值來源於主庫,執行show master status 後的position字段

2.4 查詢從庫狀態

start slave;

show slave status\G

技術分享

三:主庫SQL測試

主庫創建數據庫:

Create database copytest;

創建表:

Create table tu (uid bigint primary key);

添加一條數據

Insert into tu (1);

現在我們來看從數據庫:

技術分享

從圖中可以看到,主庫的數據,已經復制到了從庫。

五:總結問題

1:執行同步語句,出錯

mysql> change master to
master_host=’192.168.71.135’,
master_user=’syncuser’,
master_password=’123456’,
master_log_file=’mysql-bin.000001’,
master_log_pos=443;

出現如下錯誤:

Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.

解決辦法:

刪除slave的mysql庫的表

drop table slave_master_info;
drop table slave_relay_log_info;
drop table slave_worker_info;
drop table innodb_index_stats;
drop table innodb_table_stats;

重新啟動slave數據庫:/etc/init.d/mysql restart;

2:配置好的,slave執行show slave status\G語句後,slave_io_running: no顯示no

slave_io_running: yes才能正常復制,為no時無法復制,可以看到有一個錯誤,

Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

意思是master和slave的uuid重復了,用show variables like ‘%server_uuid%‘查詢出uuid,明顯兩臺機子的uuid一樣,所以出現了上面的錯誤.

技術分享

因為主從的utunbu環境是克隆的,所以出現了這個問題,我們進入mysql的data 目錄,修改auto.cnf文件,通過show variables like ‘%datadir%‘查詢出data目錄。

技術分享

用vim auto.cnf修改auto.cnf文件即可.

mysql主從復制筆記