MySql 主从复制

主要介绍

mysql 主从复制是一个异步的复制过程,底层是基于mysql数据库自带的二进制日志功能。就是一台或多台Mysql数据库(slave从库)从另一台(master主库)进行日志的复制然后再解析日志并应用到自身,最终实现从库数据与主库数据保持一致。mysql主从复制是mysql自带功能,无需借助第三方工具

mysql复制过程主要分三步:

1.master将改变记录到二进制日志(binary log)

2.slave 将master的二进制日志 拷贝到它的中继日志(relay log)文件中

3.slave重做中继日志中的事件,将改变应用到自己的数据库中

b44cc04a4a074a78a3bbedd482fb0865.png

配置过程:

1.准备两个服务器

master: 192.168.31.128
slave: 192.168.31.127

2.配置主服务器master

1.进入my.cnf文件, vim /etc/my.cnf 添加以下内容:

log-bin=mysql-bin # 启用二进制日志
server-id=128 # 服务器唯一ID,可以任意设置,但必须唯一

binlog-ignore-db=mysql # 不要复制的数据库

binlog-do-db=test01 # 要复制的数据库名

binlog_format=STATEMENT

ps aux | grep mysql #查看mysql服务名

2.重启mysql服务

systemctl restart mysql; (你的可能是systemctl restart mysqld )#重启mysql服务

3.查看mysql是否启动成功systemctl status mysql ; // 成功状态,绿色的active(running)

4.检查防火墙是否关闭
systemctl status firewalld;

防火墙开放指定端口

firewall-cmd –zone=public –add-port=3306/tcp –permanent

5.进入数据库 授权

进入mysql

mysql -uroot -proot

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18


授予权限(先创建用户后授权)
CREATE USER 'zhangkejiu'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

grant replication slave on *.* to 'zhangkejiu'@'%';



-- grant replication slave on *.* to 'zhangkejiu'@'%' identified by '123456';
-- 创建一个用户zhangkejiu 密码123456
-- 给zhangkejiu用户授予replication slave 权限
-- 常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户 才能通过该用户复制


--查看mysql用户
select user,host from mysql.user;

6.查看主服务器状态
show master status;

如:

+——————+———-+————–+——————+——————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+——————+———-+————–+——————+——————-+
| mysql-bin.000001 | 663 | | | |
+——————+———-+————–+——————+——————-+

3.配置从库slave

(1)进入my.cnf文件 vim /etc/my.cnf

添加以下内容:

server-id=127 # id唯一

relay-log=mysql-relay

(2)重启mysql
systemctl restart mysqld;

(3)查看mysql是否启动成功
systemctl status mysqld; // 出现绿色 active(running)

(4)查看防火墙是否关闭
systemctl status firewalld;

(5)进入mysql
mysql -uroot -proot

(6)设置主从同步
change master to
master_host=’192.168.31.128’, master_user=’zhangkejiu’,master_password=’123456’,
master_log_file=’mysql-bin.000001’,master_log_pos=663;

#启动从库

start slave;

注意:master_log_file 和master_log_pos的值要和主服务器显示的状态一致

(7)查看从服务器状态
show slave status\G

如下显示 表示配置成功

1
2
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

遇见失败问题:

Fatal error:The slave I/O thread stops because master and slave have equal MySQL server UUIDs;

由于我的是虚拟机克隆过来的,两个mysqlUUID 值相同冲突了

修改 auto.cnf 下server-uuid值(随便改成不同值就行)

从根路径查找文件

find / -name auto.cnf

修改后重启mysql服务,再重新配置从库配置

1
2
3
4
5
6
7
8
9
10
11
12
stop slave;



change master to master_host='192.168.134.128',
master_user='zhangkejiu',
master_password='123456',
master_log_file='mysql-bin.000003',
master_log_pos=156;

start slave;