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

來源:互聯網
上載者:User

標籤:主從同步   主從複製   


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日誌

[[email protected]~]#mysqldump -uroot -p123 -B mysql test db6000 >/dbbak/threedb.sql //完整備份主伺服器資料庫檔案

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

Mysql>drop database test;

[[email protected]~]#scp svr:/dbbak/threedb.sql  /root/   //遠程拷貝主伺服器備份檔案

[[email protected]~]#mysql -uroot -p123 <threedb.sql  //恢複主伺服器的備份檔案到本機資料庫

**從資料庫伺服器如果是複製的虛擬機器的話要修改下面檔案uuid的值

[[email protected] mysql]# cat /var/lib/mysql/auto.cnf

[auto]

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

4、配置主伺服器:

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

[[email protected]~]#vim /etc/my.cnf

[mysqld]

Log_bin          //啟用binlog日誌

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

Innodb_flush_log_at_trx_commit=1    //最佳化設定

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

……

[[email protected]~]#service mysql restart   //重啟服務,使設定生效

2)授權備份使用者:允許slaveuser從192.168.4.0/24網段訪問,對所有庫(預設不允許對單個庫)有同步許可權

mysql>grant replication slave on *.* to [email protected]”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及允許同步,啟用唯讀模式

[[email protected]~]#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    //唯讀模式

……

[[email protected]~]#service mysql restart   //重啟服務,使設定生效

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

[[email protected]~]#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、測試主從同步效果:

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

7、MySQL資料庫主從同步工作原理

1)Slave_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=……

2)Slave_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=資料名 //不複製哪些庫(兩條矛盾,不同時用)

**只在主伺服器或從伺服器一端設定即可。


本文出自 “IT技術學習” 部落格,請務必保留此出處http://learningit.blog.51cto.com/9666723/1789591

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.