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主機上也須要執行。

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;
 
37_thumb1
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;
 
38_thumb1
結論:
從上圖中的結果,咱們能夠看到mysql主從複製已經在起做用了,咱們在主數據庫中寫入的數據已經複製到咱們的從數據庫中了。
提示:
若出現如下報錯:
39_thumb1
可嘗試重啓slave:
  1 mysql> reset slave;
相關文章
相關標籤/搜索