MySQL主從設置

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=    //忽略更新某表
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章