一 基礎環境
主機名
|
系統版本
|
MySQL版本
|
主機IP
|
master
|
CentOS 6.8
|
MySQL 5.6
|
172.24.8.10
|
slave01
|
CentOS 6.8
|
MySQL 5.6
|
172.24.8.11
|
二 實際部署
2.1 安裝MySQL
1 [root@Master ~]# yum list installed | grep mysql #查看是否存在其餘MySQL組件
2 [root@Master ~]# yum -y remove mysql-libs.x86_64 #爲避免衝突引起報錯,卸載已存在的組件
3 [root@Master ~]# wget http://repo.mysql.com/mysql-community-release-el6-7.noarch.rpm
4 [root@Master ~]# rpm -ivh mysql-community-release-el6-7.noarch.rpm
5 [root@Master ~]# yum install mysql-community-server -y
6 [root@Master ~]# chkconfig --list | grep mysqld #查看MySQL是否加入啓動項
7 [root@Master ~]# 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
5 [root@Master ~]# vi /etc/sysconfig/selinux
6 SELINUX=disabled
注意:以上操做在Slave主機上也須要執行。
2.3 master my.cf配置
1 [root@Master ~]# vi /etc/my.cnf
2 [mysqld]
3 ……
4 server-id=1 #設置主服務器master的id
5 log-bin=mysql-bin #配置二進制變動日誌命名格式
注意:
master開啓二進制日誌後默認記錄全部庫全部表的操做,能夠經過配置來指定只記錄指定的數據庫甚至指定的表的操做,具體在mysql配置文件的[mysqld]可添加修改以下選項:
1 # 不一樣步哪些數據庫
2 binlog-ignore-db = mysql
3 binlog-ignore-db = test
4 binlog-ignore-db = information_schema
5 # 只同步哪些數據庫,除此以外,其餘不一樣步
6 binlog-do-db = mysqltest
2.4 建立帳號
1 [root@Master ~]# mysql -uroot -p
2 Enter password:
3 mysql> grant replication slave on *.* to 'repl_user'@'172.24.8.11' identified by 'x12345678';
4 mysql> flush privileges;
5 [root@Master ~]# service mysqld restart
6 [root@Master ~]# mysql -uroot -p
7 Enter password:
8 mysql> show master status;
file:mysql-bin.000001
position:120
2.5 slave my.cf配置
1 [root@Master ~]# vi /etc/my.cnf
2 [mysqld]
3 server-id=2 #設置從服務器slave的id
4 log-bin=mysql-bin #若是此slave是其餘slave的master,則此項也必須開啓
5 relay_log=mysql-relay-bin #配置二進制relay日誌命名格式
6 log_slave_updates=1 #表示slave將複製事件寫進本身的二進制日誌
7 read_only=1
2.6 啓動slave
1 [root@Slave01 ~]# service mysqld restart
2 [root@Slave01 ~]# mysql -uroot -p
3 Enter password:
4 mysql> change master to master_host='172.24.8.10',
5 -> master_user='repl_user',
6 -> master_password='x12345678',
7 -> master_log_file='mysql-bin.000001',
8 -> master_log_pos=120;
9 mysql> show slave status\G #查看slave狀態
10 ……
11 Slave_IO_State:
12 Master_Host: 172.24.8.10
13 Master_User: repl_user
14 Master_Port: 3306
15 Connect_Retry: 60
16 Master_Log_File: mysql-bin.000001
17 Read_Master_Log_Pos: 120
18 Relay_Log_File: =mysql-relay-bin.000001
19 Relay_Log_Pos: 4
20 Relay_Master_Log_File: mysql-bin.000001
21 Slave_IO_Running: No
22 Slave_SQL_Running: No
23 ……
24 Exec_Master_Log_Pos: 120
25 Relay_Log_Space: 120
26 ……
27 Seconds_Behind_Master: NULL
28 Master_SSL_Verify_Server_Cert: No
29 Master_Info_File: /var/lib/mysql/master.info
30 SQL_Delay: 0
31 SQL_Remaining_Delay: NULL
32 Slave_SQL_Running_State:
33 Master_Retry_Count: 86400
34 ……
提示:
Slave_IO_State, Slave_IO_Running, 和Slave_SQL_Running是No,代表slave尚未開始複製過程。
2.7 手動同步
若是Master已經存在數據,則在開啓主備複製以前,須要將Master和Slave手動同步一次(/var/lib/mysql整個目錄打包tar.gz),具體方法參考《004.MySQL主庫手動複製至從庫》。
注意:本實驗都是從新安裝的MySQL,可直接啓動同步。
三 啓動主從
3.1 Slave啓動主從服務
1 [root@Slave01 ~]# service mysqld restart
2 [root@Slave01 ~]# mysql -uroot -p
3 Enter password:
4 mysql> start slave;
5 mysql> show slave status\G #查看slave狀態
6 ……
7 Slave_IO_State: Waiting for master to send event
8 Master_Host: 172.24.8.10
9 Master_User: repl_user
10 Master_Port: 3306
11 Connect_Retry: 60
12 Master_Log_File: mysql-bin.000001
13 Read_Master_Log_Pos: 120
14 Relay_Log_File: =mysql-relay-bin.000001
15 Relay_Log_Pos: 283
16 Relay_Master_Log_File: mysql-bin.000002
17 Slave_IO_Running: YES
18 Slave_SQL_Running: YES
19 ……
20 Exec_Master_Log_Pos: 120
21 Relay_Log_Space: 120
22 ……
23 Master_Info_File: /var/lib/mysql/master.info
提示:
slave的I/O和SQL線程都已經開始運行,並且Seconds_Behind_Master再也不是NULL。日誌的位置增長了,意味着一些事件被獲取並執行了。若是你在master上進行修改,你能夠在slave上看到各類日誌文件的位置的變化,一樣,你也能夠看到數據庫中數據的變化。
3.2 驗證主從
在Master主服務器上建立庫並插入相應數據:
1 [root@Master ~]# mysql -uroot -p
2 Enter password:
3 mysql> create database mysqltest;
4 mysql> use mysqltest;
5 mysql> create table user(id int(5),name char(10));
6 mysql> insert into user values (00001,'zhangsan');
7 在Slave從服務器上進行驗證:
8 [root@Master ~]# mysql -uroot -p
9 Enter password:
10 mysql> show databases;
11 mysql> select * from mysqltest.user;
結論:
從上圖中的結果,咱們能夠看到mysql主從複製已經在起做用了,咱們在主數據庫中寫入的數據已經複製到咱們的從數據庫中了。
提示:
若出現如下報錯:
可嘗試重啓slave: