MySQL主從設置
MySQL主從又叫做AB負責;也就是A和B兩個機器做主從後,在A上些數據,另外一臺B也能跟著些數據,兩者數據實時同步;
MySQL主從是基於binlog的,主上必須開啟binlog才能進行主從;
應用場景:備份使用,只使用主機器,從機器備份,當主機器宕機,切換從機器正常訪問;分流使用,但從機器無法寫數據;
步驟為:A設置配置文件-A重啟服務-A創建主從賬號-鎖定A的數據庫寫功能-備份A所有數據庫-B設置配置文件-B重啟服務-將A備份文件傳到B機器上-B上創建與A一樣的數據庫並將數據恢復成一摸一樣-關閉B的同步功能-B設置同步參數-B開啟同步-A解鎖寫功能;
主MySQL配置
設置配置文件
vim /etc/my.cnf
增加
server-id=2 //增加server-id為2
log_bin=test01 //設置log_bin名為test01
/etc/init.d/mysqld restart //重啟mysql服務
創建test001數據庫
其實可以省略此步驟,意思就是新建一個測試數據庫test001,將mysql的內容復制到test001上
mysqldump -uroot -p123456 mysql > /tmp/mysql.sql //備份mysql數據庫 mysql -uroot -p123456 -e "create database test001" //創建test001數據庫 mysql -uroot -p123456 test001 < /tmp/mysql.sql //將剛剛備份的mysql數據庫的內容恢復到新建的test001上
創建主從mysql賬號
mysql -uroot -p123456 //登錄mysql,在mysql設置增加用戶權限
grant replication slave on *.* to ‘repl‘@‘192.168.188.3‘ identified by ‘123456‘; //創建用戶repl限定為從ip登錄,限定權限
鎖定數據庫寫功能
在登錄mysql中使用
flush tables with read lock; //鎖定數據庫服務暫時無法寫; show master status; //查看主服務的位置與id
將所有數據庫備份
mysqldump -uroot -p123456 zrlog > /tmp/zrlog.sql //將zrlog數據庫備份
mysqldump -uroot -p123456 mysql > /tmp/mysql.sql //將mysql數據庫備份
mysqldump -uroot -p123456 test001 > /tmp/test001.sql //將test001數據庫備份
mysqldump -uroot -p123456 db1 > /tmp/db1.sql //將db1數據庫備份
從MySQL配置
設置配置文件
vim /etc/my.cnf
增加
server-id=3 //只增加一行server-id
/etc/init.d/mysqld restart //重啟mysql服務
scp 192.168.188.2:/tmp/*.sql /tmp/ //將主服務器上的備份傳遞到從機器的相應目錄
mysql -uroot -p‘123456‘ //登錄mysql
創建與主服務器相應數據庫
create database test001; //這裏必須對應主服務器的數據庫,A上有的B也必須創建;
create database db1;
create database zrlog;
恢復備份數據恢復到相應數據庫下
mysql -uroot -p‘123456‘ db1 < /tmp/db1.sql
mysql -uroot -p‘123456‘ test001 < /tmp/test001.sql
mysql -uroot -p‘123456‘ zrlog < /tmp/zrlog.sql
關閉從服務的同步
stop slave;
設置同步參數
change master to master_host=‘192.168.188.2‘, master_user=‘repl‘, master_password=‘123456‘, master_log_file=‘test01.000001‘, master_log_pos=664383;
註意:這裏的master_log_file與master_log_pos後面參數,分別是主服務器A的show master status;命令
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| test01.000001 | 664383 | | | |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
開啟從服務的同步
start slave;
解鎖主服務的寫功能
登錄主服務器A的mysql
unlock tables; //解鎖主服務器的寫功能
檢測
show slave status\G //只要看Slave_IO_Running與Slave_SQL_Running是否正常
drop database test001; //主上刪除test001數據庫;
show databases; //從上查看數據庫列表,發現test001數據庫消失;
註意:如果在從服務器上操作刪除了東西,那麽主從配置就自動斷開;需要兩方數據一致後,關閉同步功能,重新指定同步參數,再打開同步才行;
其他配置
vim /etc/my.cnf
主服務器(主上配置後,從不用配置)
binlog-do-db= //僅同步指定數據庫
binlog-ignore-db= //忽略指定的數據庫
從服務器(從配置後,主不用配置)
replicate_do_db= //僅同步指定數據庫
replicate_ignore_db= //忽略指定的數據庫
replicate_wild_do_table= //如test.%,支持通配符%,同步指定更新某表
replicate_wild_ignore_table= //忽略更新某表
MySQL主從設置