溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

配置mysql數(shù)據(jù)庫主從復(fù)制

發(fā)布時間:2020-06-23 09:04:16 來源:網(wǎng)絡(luò) 閱讀:383 作者:攻城獅一枚 欄目:數(shù)據(jù)庫

 

 

一、    原理說明

復(fù)制有以下三個步驟:

 

(a)服務(wù)器把數(shù)據(jù)更改記錄到二進(jìn)制日志中。(這叫做二進(jìn)制日志事件(binary log events)。)

(b)從服務(wù)器把主服務(wù)器的二進(jìn)制日志事件拷貝到自己的中繼日志(relay log)中。

(c)從服務(wù)器重放中繼日志中的事件,把更改用到自己的數(shù)據(jù)上。

配置mysql數(shù)據(jù)庫主從復(fù)制

 

第一步:在主服務(wù)器上記錄二進(jìn)制日志。在每個更新數(shù)據(jù)的事務(wù)完成之前,主服務(wù)器都會把數(shù)據(jù)更改記錄到二進(jìn)制日志中。即使事務(wù)在執(zhí)行期間是交錯的,mysql也會串行地把事務(wù)寫入到二進(jìn)制日志中。在把事件寫入到二進(jìn)制日志之后,主服務(wù)器告訴存儲引擎提交事務(wù)。

 

第二步:從服務(wù)器把主服務(wù)器的二進(jìn)制日志拷貝到自己硬盤上,進(jìn)入所謂的“中繼日志(relay log)中。

 

它首先啟動一個工作線程,叫I/O線程。這個I/O線程開啟一個普通的客戶端連接,然后啟動一個特殊的二進(jìn)制日志轉(zhuǎn)儲進(jìn)程。這個轉(zhuǎn)儲進(jìn)程從主服務(wù)器的二進(jìn)制日志中讀取事件。它不會對事件進(jìn)行輪詢。如果它跟上了主服務(wù)器,就會進(jìn)入休眠狀態(tài),并等待有新事件發(fā)生時主服務(wù)器發(fā)出的信號。I/O線程把事件寫入從服務(wù)器的中繼日志中。

 

第三步:SQL從線程處理了該過程的最后一部分。該線程讀取了中繼日志,并且重放其中的事件,然后更新從服務(wù)器的數(shù)據(jù)。由于這個線程能跟上I/O線程,所以,中繼日志一般都是在操作系統(tǒng)的緩存中,因此中繼日志的開銷很低。同時SQL線程執(zhí)行的事件也可以被寫入從服務(wù)器自己的二進(jìn)制日志中。

 

 

二、    結(jié)構(gòu)說明

主服務(wù)器

192.168.0.103

mysqlserver

從服務(wù)器

192.168.0.104

mysqlslave

 

l  2服務(wù)器mysql版本一致,初始化表,并在后臺啟動mysql

l  前提:關(guān)閉防火墻和selinux

l  可以實現(xiàn)基于實例級,數(shù)據(jù)庫級,表級別的復(fù)制, 本實驗的是實例級主從復(fù)制

l  復(fù)制優(yōu)勢:無需共享存儲,通過網(wǎng)絡(luò)傳輸變化的數(shù)據(jù)到從庫

三、    修改主服務(wù)器master:

   #vi /etc/my.cnf   //增加以下參數(shù)

       [mysqld]

       log-bin=mysql-bin   //[必須]啟用二進(jìn)制日志

       server-id=103      //[必須]服務(wù)器唯一ID,默認(rèn)是1,一般取IP最后一段

 

四、    修改從服務(wù)器slave:

   #vi /etc/my.cnf

       [mysqld]

       log-bin=mysql-bin   //[不是必須]啟用二進(jìn)制日志

       server-id=104      //[必須]服務(wù)器唯一ID,默認(rèn)是1,一般取IP最后一段

 

五、    重啟兩臺服務(wù)器的mysql

   /etc/init.d/mysql restart

 

六、    在主服務(wù)器上建立帳戶并授權(quán)slave:

 create user 'rep1'@'192.168.0.%' identified by 'rep1234';

GRANT REPLICATION SLAVE ON *.* TO 'rep1'@'192.168.0.%';

//一般不用root帳號,“%”表示所有客戶端都可能連,只要帳號,密碼正確,此處可用具體客戶端IP代替,如192.168.145.226,加強安全

 

該用戶信息不會復(fù)制到從庫上

七、    登錄主服務(wù)器的mysql,查詢master的狀態(tài)

>show master status;

配置mysql數(shù)據(jù)庫主從復(fù)制

注:執(zhí)行完此步驟后不要再對主服務(wù)器表進(jìn)行修改,防止主服務(wù)器狀態(tài)值變化

 

 

八、    從服務(wù)器配置Slave

>change master to master_host='192.168.0.103',master_port=3306,master_user='rep1',master_password='rep1234',master_log_file='mysql-bin.000001',master_log_pos=350;   //注意不要斷開,350數(shù)字前后無單引號。

 

 

   Mysql>start slave;    //啟動從服務(wù)器復(fù)制功能

 

 

九、    檢查從服務(wù)器復(fù)制功能狀態(tài):

 

   mysql> show slave status\G

配置mysql數(shù)據(jù)庫主從復(fù)制

注:Slave_IOSlave_SQL進(jìn)程必須正常運行,即YES狀態(tài),否則都是錯誤的狀態(tài)(如:其中一個NO均屬錯誤)。

 

 

 

Master端查看:

配置mysql數(shù)據(jù)庫主從復(fù)制

 

 

十、    主從服務(wù)器測試:

 

主服務(wù)器Mysql,建立數(shù)據(jù)庫,并在這個庫中建表插入一條數(shù)據(jù):

 

  mysql> create database hi_db;

  Query OK, 1 row affected (0.00 sec)

 

  mysql> use hi_db;

  Database changed

 

  mysql>  create table hi_tb(id int(3),name char(10));

  Query OK, 0 rows affected (0.00 sec)

 

  mysql> insert into hi_tb values(001,'bobu');

  Query OK, 1 row affected (0.00 sec)

 

  mysql> show databases;

   +--------------------+

   | Database           |

   +--------------------+

   | information_schema |

   | hi_db                |

   | mysql                |

   | test                 |

   +--------------------+

   4 rows in set (0.00 sec)

 

從服務(wù)器Mysql查詢:

 

   mysql> show databases;

 

   +--------------------+

   | Database               |

   +--------------------+

   | information_schema |

   | hi_db                 |       //I'M here,大家看到了吧

   | mysql                 |

   | test          |

 

   +--------------------+

   4 rows in set (0.00 sec)

 

   mysql> use hi_db

   Database changed

   mysql> select * from hi_tb;           //查看主服務(wù)器上新增的具體數(shù)據(jù)

   +------+------+

   | id   | name |

   +------+------+

   |    1 | bobu |

   +------+------+

   1 row in set (0.00 sec)

 

十一、      主從手動切換

1)         從庫 停止 IO_THREAD 線程

mysql> stop slave IO_THREAD;

 

配置mysql數(shù)據(jù)庫主從復(fù)制

 

2)         激活從庫

root@localhost:francs>stop slave;

root@localhost:francs>reset master;

root@localhost:francs>reset slave;

 

mysql> show binary logs;

+------------------+-----------+

| Log_name         | File_size |

+------------------+-----------+

| mysql-bin.000001 |       106 |

+------------------+-----------+

1 row in set (0.00 sec)

 

 

配置mysql數(shù)據(jù)庫主從復(fù)制

 

 

3)         重啟從庫

[root@mysqlslave ~]# /etc/init.d/mysqld restart

 

mysql> show slave status\G

Empty set (0.00 sec)

 

mysql> show master status\G

*************************** 1. row ***************************

            File: mysql-bin.000002

        Position: 360

    Binlog_Do_DB:

Binlog_Ignore_DB:

1 row in set (0.00 sec)

 

4)         從庫創(chuàng)建復(fù)制用戶

create user 'rep2'@'192.168.0.%' identified by 'rep1234';

GRANT REPLICATION SLAVE ON *.* TO 'rep2'@'192.168.0.%';

//一般不用root帳號,“%”表示所有客戶端都可能連,只要帳號,密碼正確,此處可用具體客戶端IP代替,如192.168.145.226,加強安全

 

5)         原主庫103上操作

將原來主庫變?yōu)閺膸?/font>

 

  CHANGE MASTER TO

   MASTER_HOST='192.168.0.104',

   MASTER_PORT=3306,

   MASTER_USER='rep2',

   MASTER_PASSWORD='rep1234',

   MASTER_LOG_FILE='mysql-bin.000002',

   MASTER_LOG_POS=360;

 

 

mysql> start slave;

mysql> show slave status\G

配置mysql數(shù)據(jù)庫主從復(fù)制

 

6)         復(fù)制數(shù)據(jù)測試

104原從庫現(xiàn)主庫上插入數(shù)據(jù)

配置mysql數(shù)據(jù)庫主從復(fù)制

 

103原主庫現(xiàn)從庫上查詢

配置mysql數(shù)據(jù)庫主從復(fù)制

 

十二、      主從回切

目的:將之前的手動切換再回切

103回切回主

104回切回從

 

1)         103停止從庫IO線程

mysql> stop slave IO_THREAD;

mysql> show slave status\G

配置mysql數(shù)據(jù)庫主從復(fù)制

 

2)         激活103從庫

root@localhost:francs>stop slave;

root@localhost:francs>reset master;

root@localhost:francs>reset slave;

 

mysql> show binary logs;

+------------------+-----------+

| Log_name         | File_size |

+------------------+-----------+

| mysql-bin.000001 |       106 |

+------------------+-----------+

1 row in set (0.00 sec)

 

配置mysql數(shù)據(jù)庫主從復(fù)制

 

3)         重啟103從庫和查詢

[root@mysqlserver ~]# /etc/init.d/mysqld restart

 

mysql> show slave status\G

Empty set (0.00 sec)

 

mysql> show master status\G

*************************** 1. row ***************************

            File: mysql-bin.000002

        Position: 106

    Binlog_Do_DB:

Binlog_Ignore_DB:

1 row in set (0.00 sec)

 

4)         104上操作

將原來主庫變?yōu)閺膸?/font>

 

  CHANGE MASTER TO

   MASTER_HOST='192.168.0.103',

   MASTER_PORT=3306,

   MASTER_USER='rep1',

   MASTER_PASSWORD='rep1234',

   MASTER_LOG_FILE='mysql-bin.000002',

   MASTER_LOG_POS=106;

 

 

mysql> start slave;

mysql> show slave status\G

 

配置mysql數(shù)據(jù)庫主從復(fù)制

 

5)         測試

103上更新記錄

mysql> insert into hi_tb values ('5','eee');

Query OK, 1 row affected (0.00 sec)

 

104上查詢

配置mysql數(shù)據(jù)庫主從復(fù)制

 

十三、      主從宕機(jī)測試

1)         模擬主宕機(jī)

103宕機(jī)

104查看

配置mysql數(shù)據(jù)庫主從復(fù)制

 

2)         103恢復(fù)

復(fù)制恢復(fù)

配置mysql數(shù)據(jù)庫主從復(fù)制

 

3)         104宕機(jī)

103主庫不受影響

 

4)         104恢復(fù)

啟動104庫,復(fù)制恢復(fù)

配置mysql數(shù)據(jù)庫主從復(fù)制

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI