mysql主從復制筆記
一:測試環境介紹
主從復制測試環境是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目錄,你的環境可能不是該目錄),你配置完成後仍然需要重啟slave的MySQL
log_bin= mysql-bin
server_id= 110
relay_log=mysql-relay-bin
log_slave_updates=1
read_only=1
server_id是必須的,而且唯一。slave沒有必要開啟二進制日誌,但是在一些情況下,必須設置,例如,如果slave為其它slave的master,必須設置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主從復制筆記