1. 程式人生 > >MySQL高可用主從復制新增slave

MySQL高可用主從復制新增slave

insert select 建庫 nbsp cal 從庫 備份文件 com nav

目錄

  • 一 基礎環境
  • 二 新增slave2方案
    • 2.1 方案1:-復制主庫
    • 2.2 方案2:復制從庫
    • 2.3 方案對比
  • 二 新增slave2
    • 2.1 部署主從
    • 2.2 slave-02安裝MySQL
    • 2.2 初始化MySQL
  • 三 方案1形式
    • 3.1 鎖定主庫
    • 3.2 備份主庫
    • 3.3 解鎖主庫
    • 3.4 傳遞備份文件至slave02
    • 3.5 主庫繼續新建數據庫
    • 3.6 備庫slave02開啟主從復制
    • 3.7 備庫slave02恢復mysqltest
    • 3.8 備庫slave02開啟主從復制
    • 3.9 驗證數據
  • 四 方案2形式
    • 4.1 停止slave01主從復制
    • 4.2 備份slave01數據庫
    • 4.3 傳遞備份文件至slave02
    • 4.4 主庫繼續新建數據庫
    • 4.5 備庫slave02開啟主從復制
    • 4.6 備庫slave02恢復mysqltest
    • 4.7 備庫slave02開啟主從復制
    • 4.9 驗證數據


一 基礎環境

主機名 系統版本 MySQL版本 主機IP
master CentOS 6.8 MySQL 5.6 172.24.8.10
slave01 CentOS 6.8 MySQL 5.6 172.24.8.11
slave02 CentOS 6.8 MySQL 5.6 172.24.8.20

二 新增slave2方案

2.1 方案1:-復制主庫

復制主庫要步驟:
  1. 將內存中的數據同步到表中;
  2. 鎖定表,不讓出現新數據;
  3. 備份;
  4. 解鎖;
  5. 將備份傳送到slave02,在slave02上同步數據;
  6. slave2上設置相應的master_log_file和master-log_pos。

2.2 方案2:復制從庫

  1. 停止從庫slave01:mysql> stop slave;
  2. 看當前從庫的狀態,mysql> show slave status;記下 Relay_Master_Log_file 和 Exec_Master_Log_Pos;
  3. 備份從庫數據
  4. 將備份傳送到slave02,在slave2上同步數據;
  5. slave02上設置相應的master_log_file和master-log_pos。
註意:此方案中master_log_file和master-log_pos也和slave中一樣,指向主庫。

2.3 方案對比

從主庫復制會造成主庫Master一定時間段鎖表,這段時間會影響主庫的使用。直接從從庫進行復制,就不會對主庫產生影響了。 但是,從從庫復制要保證的是復制過程中從庫上的數據不會發生變化,所以要先停掉從庫。

二 新增slave2

2.1 部署主從

略,參考《002.MySQL高可用主從復制部署》。

2.2 slave-02安裝MySQL

技術分享圖片
  1 [root@Slave02 ~]# yum list installed | grep mysql	#查看是否存在其他MySQL組件
  2 [root@Slave02 ~]# yum -y remove mysql-libs.x86_64	#為避免沖突引發報錯,卸載已存在的組件
  3 [root@Slave02 ~]# wget http://mirrors.ustc.edu.cn/mysql-repo/mysql-community-release-el6-5.noarch.rpm
  4 [root@Slave02 ~]# rpm -ivh mysql-community-release-el6-5.noarch.rpm
  5 [root@Slave02 ~]# yum install mysql-community-server -y
  6 [root@Slave02 ~]# chkconfig --list | grep mysqld	#查看MySQL是否加入啟動項
  7 [root@Slave02 ~]# chkconfig mysqld on
技術分享圖片

2.2 初始化MySQL

  1 [root@Master ~]# service mysqld start
  2 [root@Master ~]# mysql_secure_installation
  3 [root@Master ~]# service iptables stop
  4 [root@Master ~]# chkconfig iptables off
提示:建議采用yum localinstall下載到本地進行安裝。

三 方案1形式

3.1 鎖定主庫

  1 [root@Master ~]# mysql -uroot -px120952576
  2 mysql> flush tables with read lock;				#鎖定主庫的表
  3 mysql> show master status\G
技術分享圖片 File: mysql-bin.000003 Position: 12

3.2 備份主庫

  1 [root@Master ~]# mysqldump -R -u root -p mysqltest >/tmp/mysqltest.sql
  2 Enter password:

3.3 解鎖主庫

  1 [root@Master ~]# mysql -uroot -px120952576
  2 mysql> unlock tables;

3.4 傳遞備份文件至slave02

  1 [root@Master ~]# scp /tmp/mysqltest.sql [email protected]:/tmp

3.5 主庫繼續新建數據庫

在Master主服務器上繼續創建庫mysqltest02並插入相應數據: 技術分享圖片
  1 [root@Master ~]# mysql -uroot -p
  2 Enter password:
  3 mysql> create database mysqltest02;
  4 mysql> use mysqltest02;
  5 mysql> create table user02(id int(5),name char(10));
  6 mysql> insert into user02 values (00002,‘lisi‘);
  7 mysql> grant replication slave on *.* to ‘repl_user‘@‘172.24.8.%‘ identified by ‘x12345678‘;
技術分享圖片 提示:主庫繼續創建新庫用於驗證slave02是否能正常復制,同時必須註意賦權給slave02。

3.6 備庫slave02開啟主從復制

技術分享圖片
  1 [root@Slave02 ~]# vi /etc/my.cnf
  2 [mysqld]
  3 server-id=3
  4 log-bin=mysql-bin
  5 relay_log=mysql-relay-bin
  6 log_slave_updates=1
  7 read_only=1
  8 [root@Slave02 ~]# service mysqld restart
技術分享圖片 解釋: server_id:服務器的標識符,唯一值,不能跟從服務器重復 log-bin=mysql-bin:開啟 binlog日誌 relay_log:開啟復制日誌,relay-log日誌記錄的是在復制過程中,從服務器I/O線程將主服務器的二進制日誌讀取過來記錄到從服務器本地文件,然後SQL線程會讀取relay-log日誌的內容並應用到從服務器。

3.7 備庫slave02恢復mysqltest

技術分享圖片
  1 [root@Slave02 ~]# mysql -uroot -px120952576
  2 mysql> create database mysqltest;
  3 mysql> use mysqltest;
  4 mysql> source /tmp/mysqltest.sql;
  5 mysql> select * from mysqltest.user;			#查看驗證
技術分享圖片 技術分享圖片

3.8 備庫slave02開啟主從復制

技術分享圖片
  1 [root@Slave02 ~]# mysql -uroot -px120952576
  2 mysql> change master to master_host=‘172.24.8.10‘,
  3 master_user=‘repl_user‘,
  4 master_password=‘x12345678‘,
  5 master_log_file=‘mysql-bin.000003‘,
  6 master_log_pos=120;
  7 mysql> start slave;
技術分享圖片 技術分享圖片 提示: 證常狀態下,看到上面的兩行加粗處,即Slave_IO_Running和Slave_SQL_Running的參數都為 Yes,就說明主從同步運行正常。

3.9 驗證數據

  1 [root@Slave ~]# mysql -uroot -px120952576
  2 [root@Slave02 ~]# mysql -uroot -px120952576
  3 mysql> select * from mysqltest02.user02;
  4 #兩臺slave上均驗證master第二次創建的測試庫是否正常復制過來。
技術分享圖片

四 方案2形式

4.1 停止slave01主從復制

  1 [root@Slave ~]# mysql -uroot -px120952576
  2 mysql> stop slave;
  3 mysql> show slave status\G
記錄以下兩項: Relay_Master_Log_File: mysql-bin.000003 Exec_Master_Log_Pos: 932

4.2 備份slave01數據庫

  1 [root@Slave01 ~]# mysqldump -R -u root -p mysqltest >/tmp/mysqltest.sql
  2 Enter password:

4.3 傳遞備份文件至slave02

  1 [root@Slave01 ~]# scp /tmp/mysqltest.sql [email protected]:/tmp

4.4 主庫繼續新建數據庫

在Master主服務器上繼續創建庫mysqltest02並插入相應數據: 技術分享圖片
  1 [root@Master ~]# mysql -uroot -p
  2 Enter password:
  3 mysql> create database mysqltest02;
  4 mysql> use mysqltest02;
  5 mysql> create table user02(id int(5),name char(10));
  6 mysql> insert into user02 values (00002,‘lisi‘);
  7 mysql> grant replication slave on *.* to ‘repl_user‘@‘172.24.8.%‘ identified by ‘x12345678‘;
技術分享圖片 提示:主庫繼續創建新庫用於驗證slave02是否能正常復制,同時必須註意賦權給slave02。

4.5 備庫slave02開啟主從復制

參考3.6.

4.6 備庫slave02恢復mysqltest

參考3.7.

4.7 備庫slave02開啟主從復制

技術分享圖片
  1 [root@Slave02 ~]# mysql -uroot -px120952576
  2 mysql> change master to master_host=‘172.24.8.10‘,
  3 master_user=‘repl_user‘,
  4 master_password=‘x12345678‘,
  5 master_log_file=‘mysql-bin.000003‘,
  6 master_log_pos=932;
  7 mysql> start slave;
技術分享圖片 提示: 證常狀態下,看到上面的兩行加粗處,即Slave_IO_Running和Slave_SQL_Running的參數都為 Yes,就說明主從同步運行正常。

4.9 驗證數據

參考3.9.

MySQL高可用主從復制新增slave