mysql 读写分离 主从复制

0、master主库配置

名称 IP mysql
服务器A-master 192.168.0.161 mysql 8.0
服务器B-slave  192.168.0.162 mysql 8.0

1、master主库配置

1) 在 /etc/my.cnfmysql核心配置文件的[mysqld]节点内,新增如下配置:

[mysqld]
## 设置server_id,注意要唯一,只能为数字
server_id=1
## 开启binlog
log-bin=mysql-bin
## binlog缓存
binlog_cache_size=1M
## binlog格式(mixed、statement、row,默认格式是statement)
binlog_format=mixed
binlog-do-db=test_db    #待同步的数据库日志,可省略,省略为全部
binlog-ignore-db=mysql  #不同步的数据库日志,可省略,省略为无

2) 创建专门用于主从复制用户账号。因此使用root账户登录mysql,并执行一些指令:  

--登录
mysql -u root -p密码
--创建用户 我这里用户名为copyuser,注意这里的ip是从库服务器的ip
CREATE USER 'copyuser'@'192.168.0.162' IDENTIFIED WITH mysql_native_password BY '123456';
--给主从复制账号授权
grant replication slave on *.* to 'copyuser'@'192.168.0.162';

3) 重启主库的mysql

service mysqld restart

4) 再次登录mysql,使用如下指令查看master的状态:

--登录
mysql -u root -p密码
--查看master的状态
show master status;

结果类似如下:我们需要关注File和Position的信息,后面要用到。

2、slave从库配置

1) 在从库 /etc/my.cnfmysql核心配置文件的[mysqld]节点内,新增如下配置:

[mysqld]
## 设置server_id,注意要唯一
server_id=2
## 开启binlog,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
## 如果需要同步函数或者存储过程
log_bin_trust_function_creators=true
## binlog缓存
binlog_cache_size=1M
## binlog格式(mixed、statement、row,默认格式是statement)
binlog_format=mixed
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

2) 重启从库的mysql

service mysqld restart

3) 从库执行同步

--1,先登录mysql,然后执行后续代码
mysql -u root -p密码
--2,关闭从库
stop slave;
--3,设置同步,注意这里是主库ip,日志名称和位置是我们之前上图中看到的名称和位置
change master to master_host='192.168.0.161',master_user='copyuser',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=157;
--4,开启从库
start slave; 
-- 5,检查服务器状态
show slave status \G;

显示正常结果如下:

看到Slave_IO_Running: Yes,Slave_SQL_Running: YesReplica has read all relay log; waiting for more updates 基本说明配置成功了,已经开始了主从复制

3、测试主从MySQL8复制功能

 测试就非常简单了,在主库的表中新增一条数据,然后打开从库的对应表,发现也有了一样的记录数据,说明就复制成功了。

4、可能出现的错误问题解答

 1) mysql主从配置之后,重启后出现Slave failed to initialize relay log info structure from the repository

解决方法:在start slave之前,先启用

reset slave

 2) 集群中 id 重复 mysql equal_master and slave have equal MySQL server ids

注意所有主从中my.cnf文件节点中 server_id 是否重复,可在mysql中使用一下命令查看 server_id设置是否生效

mysql> show variables like 'server_id';

可通过一下命令通过sql设置 server_id

set global server_id=1;

 3) 同步出错  

使用下面sql查看具体错误

select * from performance_schema.replication_applier_status_by_worker;

posted @ 2019-06-11 09:22  ejiyuan  阅读(951)  评论(0编辑  收藏  举报