一 基礎環境
主機名
|
系統版本
|
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。
注意:此方案中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 root@172.24.8.20:/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 root@172.24.8.20:/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.