MySQL主從叫作Replication、AB複製。就是A和B兩臺機器作主從後,在A上寫數據,B也會跟着寫數據,二者數據實時同步的。mysql
MySQL主從是基於binlog的,主上須開啓binlog才能進行主從。主從主要做用:數據備份,負載均衡(讀寫分離)web
主從配置步驟:sql
1.主將更改操做記錄到binlog裏。數據庫
2.從將主的binlog事件(sql語句)同步到從本機上並記錄在relaylog裏。vim
3.從根據relaylog裏面的sql語句按順序執行 主上有一個log dump線程,用來和從的I/O線程傳遞binlog 從上有兩個線程,其中I/O線程用來同步主的binlog並生成relaylog,另一個SQL線程用來把relaylog裏面的sql語句落地。bash
準備兩臺機器,配置好基礎環境,都安裝好mysql並開啓mysql服務。服務器
1.修改mysql主配置:負載均衡
vim /etc/my.cnf #添加如下配置:ide
server-id=101 #定義server id ,可隨意定義 log_bin=zjy01 #定義binlog的log前綴,可隨意定義
重啓mysql服務:性能
/etc/init.d/mysqld restart
查看/data/mysql/下是否有對應log_bin定義的前綴文件生成:zjy.000001和zjy.index
2.建立測試所用數據庫和數據文件:
從原有的test數據庫導出數據:
mysqldump -uroot -p123456 test > /tmp/test.sql
建立新庫test2用於測試:
mysql -uroot -p123456 -e 「create database test2」
將導出的測試數據test.sql恢復到test2庫中:
mysql -uroot -p123456 test2 < /tmp/test.sql
3.建立並設置同步數據用戶相關:
建立一個mysql的用戶用於數據同步時使用:
mysql -uroot -p123456
mysql> grant replication slave on *.* to 'repl'@'192.168.1.101' identified by '123456'; #repl用戶,1.101爲從庫的IP
鎖定數據表
mysql> flush tables with read lock; #暫時中斷寫入操做,保持此狀態進行同步
查看並記住file和position
mysql> show master status; #主從配置時用到
4.備份主庫全部數據庫:
mysqldump -uroot -p123456 zrlog > /tmp/zrlog.sql
......
1.修改mysql主配置:
vim /etc/my.cnf #添加如下配置:
server-id=102 #與主不同
log_bin不須要配置
重啓mysql服務:
/etc/init.d/mysqld restart
2.拷貝主上備份的全部數據庫的備份sql文件並恢復:
拷貝備份文件
scp 192.168.1.101:/tmp/*.sql /tmp/
建立對應於主上的全部庫
mysql -uroot -p123456 -e 「create database test2」
mysql -uroot -p123456 -e 「create database test1」
mysql -uroot -p123456 -e 「create database zrlog」
......
恢復數據到數據庫:
mysql -uroot -p123456 test2< /tmp/test2.sql
mysql -uroot -p123456 zrlog< /tmp/zrlog.sql
......
3.配置從:
mysql -uroot -p123456
mysql> stop slave;
mysql> change master to master_host='192.168.1.101', master_user='repl', master_password='123456', master_log_file='zjy.000001', master_log_pos=542; #1.101爲主IP,zjy.000001和542爲住配置中第三步show master status;查看出來的file和position字段的內容
mysql> start slave;
查看是否配置主從成功:
mysql> show slave status\G
*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.101 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: zjy.000002 Read_Master_Log_Pos: 120 Relay_Log_File: localhost-relay-bin.000005 Relay_Log_Pos: 282 Relay_Master_Log_File: zjy.000002 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table:
主上解鎖表:
mysql -uroot -p123456
mysql> unlock tables;
參數介紹:Mysql的my.cnf配置文件中
主服務器: binlog-do-db= #僅同步指定的庫 binlog-ignore-db= #忽略指定的庫 從服務器: replicate_do_db= #同步指定的庫 replicate_ignore_db= #忽略指定的庫 replicate_do_table= #同步指定的表 replicate_ignore_table= #忽略指定的表 #建議只使用下面2個語句,使用參數「replicate_wild_」,使匹配更精確,提高使用性能。 replicate_wild_do_table= 如zjy.%,支持通配符 replicate_wild_ignore_table=
主操做:
mysql -utest2
mysql> show tables;
mysql> select count(*) plugin; #查看plugin表有多少行
mysql> truncate table plugin; #清空表裏數據
mysql> drop table website; #刪除表website
從操做:
mysql -utest2
mysql> select count(*) plugin; #查看plugin表是否已經清空數據
mysql> show tables; #查看website表是否已經不存在
須要從新備份恢復從新配置主從