MySQL主從同步(複製)的配置


1、主從複製的原理:

*Master,記錄數據更改操作

- 啓用binlog記錄模式

- 允許Slave讀取binlog日誌

*Slave運行2個同步線程

- Slave_IO:負責連接Master,複製其binlog日誌文件到本機的relay-log文件

- Slave_SQL:執行本機relay-log文件裏的SQL語句,重現Master的數據操作

2、基本構建思路:

1)初始化現有庫:將主庫導入從庫,確保數據一致性

2)配置Master,主服務器:調整運行參數,授權一個同步用戶

3)配置Slave,從服務器:調整運行參數,發起同步操作

3、初始化現有庫:

**從數據庫服務器上一定要有主數據庫服務器的庫和表,但主數據庫服務器上不需要必須有從數據庫服務器上的庫和表。從服務器應包括希望同步的所有庫,對採用MyISAM的庫,可離線備份。

mysql>reset master;  //重置binlog日誌

[root@svr~]#mysqldump -uroot -p123 -B mysql test db6000 >/dbbak/threedb.sql //完整備份主服務器數據庫文件

對於從服務器,離線導入由主服務器提供的備份,清空同名庫(若有的話)

Mysql>drop database test;

[root@pc~]#scp svr:/dbbak/threedb.sql  /root/   //遠程拷貝主服務器備份文件

[root@pc~]#mysql -uroot -p123 <threedb.sql  //恢復主服務器的備份文件到本機數據庫

**從數據庫服務器如果是克隆的虛擬機的話要修改下面文件uuid的值

[root@localhost mysql]# cat /var/lib/mysql/auto.cnf

[auto]

server-uuid=a1c22f29-7d1a-11e4-b7f9-099e0022adfD

4、配置主服務器:

1)調整運行參數,啓用binlog及允許同步

[root@svr~]#vim /etc/my.cnf

[mysqld]

Log_bin          //啓用binlog日誌

Server_id=6     //指定服務器ID號,標識自己身份,一般使用IP地址主機位

Innodb_flush_log_at_trx_commit=1    //優化設置

Sync-binlog=1     //允許日誌同步

……

[root@svr~]#service mysql restart   //重啓服務,使設置生效

2)授權備份用戶:允許slaveuser192.168.4.0/24網段訪問,對所有庫(默認不允許對單個庫)有同步權限

mysql>grant replication slave on *.* to slaveuser@”192.168.4.%”  identified by “123”;

3)查看主服務器狀態,記住當前的binlog日誌文件名、偏移量pos點號

mysql>show master status\G;  //查看當前正在使用的binlog日誌文件名和偏移量 pos點號

file:svr6-bin.000003   //日誌文件名

position:335     //偏移量

……

5、配置從服務器:

1)調整運行參數,啓用binlog及允許同步,啓用只讀模式

[root@pc~]#vim  /etc/my.cnf

[mysqld]

log_bin        //啓用binlog日誌

server_id=20       //指定服務器ID

Innodb_flush_log_at_trx_commit=1    //優化設置

sync-binlog=1     //允許日誌同步

read_only=1    //只讀模式

……

[root@pc~]#service mysql restart   //重啓服務,使設置生效

2)發起同步操作,指定主服務器相關參數

[root@pc~]#mysql   -uroot  -p123

mysql> show slave status;

 

mysql>change  master  to  master_host="192.168.4.6",

master_user="slaveuser",

master_password="123456",

master_log_file="svr6-bin.000003",    //binlog日誌文件

master_log_pos=335;   //偏移量pos點號

 

mysql> showslave status\G;

slave_IO_Running: No  

slave_SQL_Running: No  

 

mysql>start   slave;     //啓動複製

 

mysql> show slave status\G;   //查看從服務器狀態

slave_IO_Running: YES     //IO線程已運行

slave_SQL_Running: YES     //SQL線程已運行

6、測試主從同步效果:

在主數據庫服務器本機登錄,建庫建表,從數據庫服務器上有主數據庫服務器上的庫和表,在主數據庫服務器執行插入、更新操作,從服務器有同步更新,就成功了。

7MySQL數據庫主從同步工作原理

1Slave_IO_Running:負責把主數據庫服務器當前正在使用的binlog日誌裏的sql語句,拷貝到本機relaybinlog日誌裏,在master_log_file的文件裏從master_log_pos開始拷貝

Master.info :保存主從關聯信息(change  master   to……),啓動服務時加載。

 pc205-relay-bin.000002    pc205-relay-bin.index   relay-log.info

vim /etc/my.cnf

[mysqld]

Relay_log=……

2Slave_SQL_Running:負責執行本機relaybinlog日誌裏的sql語句,把數據寫進數據庫裏

3)報錯信息:

IO進程出錯:查看狀態時Last_IO_Errno: 0   //錯誤次數

                Last_IO_Error: //最後一次出錯信息

IO出錯的情況:

- 連接不上主數據庫服務器(ping  iptables selinux 授權  主服務器當前使用的日誌文件和節點指錯(在主服務器使用show master status;查看在從服務器使用change master to ……重新設置,要先停止進程 stop slave;改好後start slave;) 

SQL進程出錯:Last_SQL_Errno: 0

               Last_SQL_Error:

SQL出錯的情況:和主數據庫服務器上的庫、表、表結構不一致(把主服務器上的庫、表備份還原到從服務器上)

4)停止從服務器:

stop slave 

刪除Master.info   pc205-relay-bin.000002    pc205-relay-bin.index   relay-log.info

8、主從同步的結構模式

1)一主一從:主服務器壞掉訪問從服務器的時候,從服務器的數據沒有備份;從服務器壞掉的時候主服務器的數據也沒有備份裏

2)一主多從:配置時在主服務器上授權多個slave用戶在做從服務器的主機上連接自己;或者授權一個用戶在@“%”所有主機連接自己(不安全)。

3)主從從:配置主從,配置從從(同主從),主服務器和從從服務器不同步,客戶端連接從服務器產生的sql語句記錄到本身的binlog日誌,而拷貝的主服務器的sql語句記錄到relaybinlog日誌裏,從從服務器只讀取從服務器本身binlog日誌。要主服務器和從從服務器同步,要配置從服務器:

Vim  /etc/my.cnf

[mysqld]

……

Log-slave-updates   //記錄從庫更新,允許鏈式複製(A-B-C)配置後從主服務器同步過來的日誌即寫到relaylog裏也寫到自己的binlog日誌裏,以便自身的從服務器根據binlog讀取日誌以同步數據

……

4)主主結構:互爲主從

9、僅需要從服務器備份主服務器的某個或某些庫:

授權時不可以僅對某庫授權,replicationslave授權必須時全局授權

**在配置主從同步時,在主數據庫服務器上設置讓從數據庫服務器如何備份自己的庫:

Vim  /etc/my.cnf

[mysqld]

……

Binlog-do-db=數據庫名   //設置主服務器對哪些庫記binlog日誌,此選項可設置多條,省略時複製所有庫

Binlog-ignore-db=數據庫名 //設置主服務器對哪些庫不記binlog日誌(兩條矛盾,不同時用)

……

**或在配置主從同步時,在從數據庫服務器上設置自己如何備份主數據庫服務器的庫:

Vim  /etc/my.cnf

[mysqld]

……

Replicate-do-db=數據庫名  //僅複製指定庫,其他庫將被忽略,此選項可設置多條,省略時複製所有庫

Replicate-ignore-db=數據名 //不復制哪些庫(兩條矛盾,不同時用)

**只在主服務器或從服務器一端設置即可。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章