1. 程式人生 > >002.MySQL高可用主從復制部署

002.MySQL高可用主從復制部署

etc set ima har 增加 from family main 主從

一 基礎環境

主機名 系統版本 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;

002.MySQL高可用主從復制部署