MySQL高可用主从复制部署

Posted 裸奔的小鸵鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
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
结论:
从上图中的结果,我们可以看到mysql主从复制已经在起作用了,我们在主数据库中写入的数据已经复制到我们的从数据库中了。
提示:
若出现以下报错:
39
可尝试重启slave:
  1 mysql> reset slave;

以上是关于MySQL高可用主从复制部署的主要内容,如果未能解决你的问题,请参考以下文章

002.MySQL高可用主从复制部署

MySQL高可用之MHA—部署MHA

MySQL高可用主从复制新增slave

运维实战 Mysql高可用与健康检查

MYSQL高可用架构之MHA实战一 数据库主从配置(真实可用)

MHA-结合MySQL半同步复制高可用集群(Centos7)