Linux使用docker搭建Mysql主从复制

本文介绍了如何在Docker环境下搭建Percona MySQL服务器以及设置主从复制。首先,详细阐述了Percona Server的特性及优势,然后通过步骤演示了在Docker中创建Percona主库和从库的过程,包括配置文件设置、用户授权和主从同步的实现。最后,提到了主从复制的错误排查方法,强调了server-id的唯一性和检查错误日志的重要性。
摘要由CSDN通过智能技术生成

(一)引言

Mysql5.7与Mysql8操作稍有差别,Mysql8的授权模式有改动,需要先创建用户;

使用Docker来模拟两台服务器,原理和使用2台不同IP的服务器一样。

(二)percona

        Percona 为 MySQL 数据库服务器进行了改进,在功能和性能上较 MySQL 有着很显著的提升。

        该版本提升了在高 负载情况下的 InnoDB 的性能、为 DBA 提供一些非常有用的性能诊断工具;另外有更多的参数和命令来控制服务器行为。

        Percona Server 只包含 MySQL 的服务器版,并没有提供相应对 MySQL 的 Connector 和 GUI 工具进行改进。

        Percona Server 使用了一些 google-mysql-tools, Proven Scaling, Open Query 对 MySQL 进行改造。

        镜像地址:https://hub.docker.com/_/percona/

        使用docker拉取percona镜像

[root@icoolkj docker]# docker pull percona:ps-8.0.28-19

d17fd78636493f06e10719a878c5f998.png

(三)Mysql主从复制搭建

1、主库搭建

a)搭建主库

## 创建主库映射目录
[root@icoolkj docker]# pwd
/usr/local/docker
[root@icoolkj docker]# mkdir -p mysql-master
[root@icoolkj docker]# cd mysql-master/
[root@icoolkj mysql-master]# mkdir data logs conf 
[root@icoolkj mysql-master]#  chmod 777 * -R

ff1ed51acdc3177999456ab320aeb9e6.png

## 创建配置文件
[root@icoolkj mysql-master]# cd conf/
[root@icoolkj conf]# vim my.cnf
[root@icoolkj conf]# cat my.cnf
[mysqld]
#开启二进制日志 
log-bin=mysql-bin 
#标识唯一id(必须),一般使用ip最后位 
server-id=1 
#不同步的数据库,可设置多个
binlog-ignore-db=information_schema 
binlog-ignore-db=performance_schema 
binlog-ignore-db=mysql 
#指定需要同步的数据库(和slave是相互匹配的),可以设置多个
#binlog-do-db=test
#设置存储模式不设置默认
binlog_format=MIXED 
#日志清理时间
expire_logs_days=7 
#日志大小 
max_binlog_size=200m 
#缓存大小 
binlog_cache_size=5m 
#最大缓存大小 
max_binlog_cache_size=512m  
[root@icoolkj conf]# 

2de76fd03144dab8a7fecea202fe8203.png

## 创建容器
docker create --name percona-master \
-v /usr/local/docker/mysql-master/conf:/etc/mysql \
-v /usr/local/docker/mysql-master/logs:/var/log/mysql \
-v /usr/local/docker/mysql-master/data:/var/lib/mysql \
-p 13306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
percona:ps-8.0.28-19

## 参数解释:
--name: percona 指定是容器的名称
 -v: /usr/local/docker/mysql-master/data:/var/lib/mysql 将主机目录/usr/local/docker/mysql-master/data挂载到容器的/var/lib/mysql上
-p: 13306:3306 设置端口映射,主机端口是13306,容器内部端口3306
 -e: MYSQL_ROOT_PASSWORD=root 设置容器参数,设置root用户的密码为root
percona:latest: 镜像名版本
## 启动容器 并 查看日志
[root@icoolkj mysql-master]# docker start percona-master && docker logs -f percona-master

eeaee89f0ceda8501ab40c9def241faf.png

b)连接主库9875d6f53e6a3a7c21c056a1833b7d06.png

## 进入percona-master容器
[root@icoolkj ~]# docker exec -it percona-master bash
bash-4.4$ mysql -uroot -proot
## 打开mysql库
mysql> use mysql
## 允许使用root账户连接的ip为任意
mysql> alter user 'root'@'%' identified with mysql_native_password by 'root';
## 如果前面步骤没有报错且刷新权限了还是不可以远程连接,就重新启动数据库。

 c)创建同步账号及授权

## 也可以用navicat 工具创建
create user 'sync_user'@'%' identified by 'sync_user';
alter user 'sync_user'@'%' identified with mysql_native_password by 'sync_user';
grant replication slave on *.* to 'sync_user'@'%';

## 查询master的状态
mysql> show master status;

0aaa17947f8726d241f69f333441b618.png

## 查看二进制日志相关的配置项
mysql>  show global variables like 'binlog%';

 cb4d6ac59ab9e9c5a6009776cd66510b.png

## 查看server相关的配置项
mysql> show global variables like 'server%';

611fef2c03dfe4196a7cee43fe89aa0a.png 

2、从库搭建

a)搭建从库

## 创建从库映射目录
[root@icoolkj ~]# cd /usr/local/docker/
[root@icoolkj docker]# ls
mysql-master
[root@icoolkj docker]# mkdir mysql-slave
[root@icoolkj docker]# cd mysql-slave/
[root@icoolkj mysql-slave]# mkdir data logs conf 
[root@icoolkj mysql-slave]# chmod 777 * -R
[root@icoolkj mysql-slave]# ll
总用量 12
drwxrwxrwx 2 root root 4096 6月   8 11:31 conf
drwxrwxrwx 2 root root 4096 6月   8 11:31 data
drwxrwxrwx 2 root root 4096 6月   8 11:31 logs
[root@icoolkj mysql-slave]# 

 2928c1e35dff0a1b5f7747301bb24a5f.png

## 创建配置文件
[root@icoolkj ~]# cd /usr/local/docker/mysql-slave/
[root@icoolkj mysql-slave]# cd conf/
[root@icoolkj conf]# vim my.cnf
[root@icoolkj conf]# cat my.cnf 
[mysqld]
#开启二进制日志 
log-bin=mysql-bin 
server-id=2 
binlog-ignore-db=information_schema 
binlog-ignore-db=performance_schema 
binlog-ignore-db=mysql 
#与主库配置保持一致 
#replicate-do-db=test 
replicate-ignore-db=mysql 
log_replica_updates 
replica_skip_errors=all 
replica_net_timeout=60 
[root@icoolkj conf]# 
## 创建容器
docker create --name percona-slave \
-v /usr/local/docker/mysql-slave/conf:/etc/mysql \
-v /usr/local/docker/mysql-slave/logs:/var/log/mysql \
-v /usr/local/docker/mysql-slave/data:/var/lib/mysql \
-p 13307:3306 \
-e MYSQL_ROOT_PASSWORD=root \
percona:ps-8.0.28-19
## 启动容器 并 查看日志
[root@icoolkj conf]# docker start percona-slave && docker logs -f percona-slave
## 查看server相关的配置项
mysql> show global variables like 'server%';

 be3058ed2717d9ccab7d1c9c6bd3b1fb.png

b)连接从库

根据主库连接方式设置连接,连接navicat。

## 进入percona-slave容器
[root@icoolkj ~]# docker exec -it percona-slave bash
bash-4.4$ mysql -uroot -proot
## 打开mysql库
mysql> use mysql
## 允许使用root账户连接的ip为任意
mysql> alter user 'root'@'%' identified with mysql_native_password by 'root';
## 如果前面步骤没有报错且刷新权限了还是不可以远程连接,就重新启动数据库。

40c44d616534e74bcbd50440c18eb9e7.png

c)配置主库信息

## navicat 查询主库的master的状态
show master status;
## navicat 设置master相关信息
change master to
master_host='192.168.188.98',  ## 互联ip
master_user='sync_user',
master_password='sync_user',
master_port=13306,
master_log_file='mysql-bin.000003',
master_log_pos=157;
## 启动同步
start slave;


## 查看slave 状态
show slave status;

 3、测试主从复

主库创建数据库,刷新从库,看看是否复制成功;

主库创建表并插入数据,刷新从库,看看是否存在同样表及数据信息;

e2e962cb935d0721cd7e2200363b23a9.png 3bc91a44a3cdca9524f67166502b7b84.png

(四)Mysql主从复制错误排查

  1. 先确定主机和从机的server-id是否不一样,如果一样也会导致主从复制失败。主机和从机的server-id在/etc/my.cnf配置文件中配置的。

  2. 看错误日志,我们可以从/etc/my.cnf文件中知道错误日志文件的位置,这是mysql配置文件中默认就有的,如果你改变了也可以查看你改变的位置。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值