MySQL高可用主從復制新增slave
阿新 • • 發佈:2019-01-16
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:-復制主庫
復制主庫要步驟:- 將內存中的數據同步到表中;
- 鎖定表,不讓出現新數據;
- 備份;
- 解鎖;
- 將備份傳送到slave02,在slave02上同步數據;
- slave2上設置相應的master_log_file和master-log_pos。
2.2 方案2:復制從庫
- 停止從庫slave01:mysql> stop slave;
- 看當前從庫的狀態,mysql> show slave status;記下 Relay_Master_Log_file 和 Exec_Master_Log_Pos;
- 備份從庫數據
- 將備份傳送到slave02,在slave2上同步數據;
- slave02上設置相應的master_log_file和master-log_pos。
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\GFile: 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