Mysql主从复制 环境搭建

Master -server配置

1.关闭防火墙

systemctl stop firewalld.service

2.停掉mysql

systemctl stop mysqld.service

3.开启binlog

vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1

4.启动mysql

systemctl start mysqld.service

5.登录mysql,并创建用户

mysql -uroot -p
CREATE USER 'slave'@'192.168.11.128' IDENTIFIED BY 'slave';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.11.128';
或者
CREATE USER 'slave'@'%' IDENTIFIED BY 'slave';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

Slave-server配置

1.停掉mysql

systemctl stop mysqld.service

2.修改my.cnf

vim /etc/my.cnf
[mysqld]
server-id=2

3.启动mysql

systemctl start mysqld.service

4.登录mysql

mysql -uroot -p	

5.在Master中执行,查询Master状态

mysql> show master status

6.Slave中设置Master信息

change master to master_host='192.168.11.128', master_user='slave', master_password='slave', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=155, master_connect_retry=30;

注意:如果该线程在运行,停掉slave io线程
STOP SLAVE IO_THREAD FOR CHANNEL '';

说明:

master_log_file='mysql-bin.000001' #指定Slave从哪个日志文件开始读复制数据(Master上执行命令的结果的File字段)

master_log_pos=1797 # 从哪个POSITION号开始读(Master上执行命令的结果的Position字段)

master_user='slave' # 用于同步数据的用户(在Master中授权的用户)

master_password='123456' # 同步数据用户的密码

master_host='192.168.11.128' # Master的IP地址

7.查看主从同步状态
在Slave中执行命令

mysql> show slave statusG;

可看到Slave_IO_State为空, Slave_IO_Running和Slave_SQL_Running是No,表明Slave还没有开始复制过程。相反Slave_IO_Running和Slave_SQL_Running是Yes表明已经开始工作了

8.开启主从同步

在Slave中执行命令

# 开启同步
start slave;

9.检查主从复制通信状态

mysql> show slave statusG;

Slave_IO_State #从站的当前状态
Slave_IO_Running: Yes #读取主程序二进制日志的I/O线程是否正在运行
Slave_SQL_Running: Yes #执行读取主服务器中二进制日志事件的SQL线程是否正在运行。与I/O线程一样
Seconds_Behind_Master #是否为0,0就是已经同步了

必须都是 Yes

如果不是原因主要有以下 4 个方面:

1、网络不通
2、密码不对
3、MASTER_LOG_POS 不对 ps
4、mysql 的 auto.cnf server-uuid 一样(可能你是复制的mysql)

vim /var/lib/mysql/auto.cnf
[auto]
server-uuid=6b831bf3-8ae7-11e7-a178-000c29cb5cbc # 按照这个16进制格式,修改server-uuid,重启mysql即可

10. 测试
(1.)在 Master-Server 创建测试库

 mysql> CREATE DATABASE `replication_wwww.ymq.io`;
 mysql> use `replication_wwww.ymq.io`;
 mysql> CREATE TABLE `sync_test` (`id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

(2.)在 Slave-Server 查看是否同步过来

mysql> show databases;
mysql> use replication_wwww.ymq.io
mysql> show tables;

其他常用命令

查看主服务器的运行状态

mysql> show master status;

查看从服务器主机列表

mysql> show slave hosts;

获取binlog文件列表

mysql> show binary logs;

只查看第一个binlog文件的内容

mysql> mysql> show binlog events;

查看指定binlog文件的内容

mysql> mysql> show binlog events in 'mysql-bin.000001';

启动从库复制线程

mysql> START SLAVE;

停止从库复制线程

mysql> STOP SLAVE;

相关链接

Mysql主从服务器搭建

基于binlog主从复制

Linux下搭建Mysql集群

原文地址:https://www.cnblogs.com/tomtellyou/p/12403645.html