Mysql主从设置

说明

两台linux服务器进行主从实验
mysql:mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar
主(写):192.168.198.221
从(读):192.168.198.222
需要mysql初始环境一样

原理:

  1. 主服务器建立2进制日志,每产生语句或磁盘变化,写进日志
  2. 从服务器监听主服务器建立relaylog(中继日志)
  3. 主服务器建立授权复制账号,从服务器利用复制账号来监听主服务器的日志notice:
    所有的mysql服务器都有1个独一无二的id server_id

主从设置

第一步,编辑my.cnf

1
vi /etc/my.cnf

主master:

1
2
3
log-bin=mysql-bin  #写二进制日志 
binlog-format=mixed
server-id=221 #同一局域网内一般为ip的后3位

从slave:

1
2
relay-log=mysql-relay
server-id=222 #同一局域网内一般为ip的后3位

第二步:重启 主,从mysql服务

1
sudo service mysqld restart                   #重启

第三步:

主: 创建账号:repl 密码:!QAZ2wsx

1
2
3
mysql -uroot -p              #进入mysql
grant replication client,replication slave on *.* to 'repl'@'%' identified by '!QAZ2wsx;    #创建账号
show master status; #查看当前master二日志进制状态


从: 抄主服务器日志,主服务器的日志位置,如上图

1
2
3
4
5
6
7
8
9
#进入mysql
mysql -uroot -p
#抄主服务器日志
change master to
master_host='192.168.198.221',
master_user='repl',
master_password='!QAZ2wsx',
master_log_file='mysql-bin.000001',
master_log_pos=457;

1
2
3
show  slave status \G   #查看从机slave状态
#如果状态不是配置的机器可以重置 重新执行抄主服务器的代码
reset slave #重置


启动slave

1
2
start slave;       #启动slave
show slave status \G #再次查看从机slave状态

测试

主:插入测试数据

1
2
3
4
5
6
7
8
9
10
11
12
-- 创建数据库--
CREATE DATABASE test;
-- 进入数据库--
use test;
-- 创建表--
CREATE TABLE `test` (
`id` INT NOT NULL,
`test` VARCHAR (255) NULL,
PRIMARY KEY (`id`)
);
-- 插入数据--
INSERT INTO `test`.`test` (`id`, `test`) VALUES ('1', '1');


主:查看数据

1
SELECT * FROM `test`;


从:查看数据

1
2
3
4
-- 进入test数据库 --
use test;
-- 查看数据--
SELECT * FROM `test`;