(一)引言
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
(三)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
## 创建配置文件
[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]#
## 创建容器
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
b)连接主库
## 进入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;
## 查看二进制日志相关的配置项
mysql> show global variables like 'binlog%';
## 查看server相关的配置项
mysql> show global variables like 'server%';
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]#
## 创建配置文件
[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%';
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';
## 如果前面步骤没有报错且刷新权限了还是不可以远程连接,就重新启动数据库。
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、测试主从复制
主库创建数据库,刷新从库,看看是否复制成功;
主库创建表并插入数据,刷新从库,看看是否存在同样表及数据信息;
(四)Mysql主从复制错误排查
-
先确定主机和从机的server-id是否不一样,如果一样也会导致主从复制失败。主机和从机的server-id在/etc/my.cnf配置文件中配置的。
-
看错误日志,我们可以从/etc/my.cnf文件中知道错误日志文件的位置,这是mysql配置文件中默认就有的,如果你改变了也可以查看你改变的位置。