002.MySQL高可用主從複製部署
一 基礎環境
主機名 |
系統版本 |
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主機上也需要執行。
安裝參考: http://www.cnblogs.com/007sx/p/7083143.html
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:
1 mysql> reset slave;