(一)引言
Mysql5.7与Mysql8操作稍有差别,Mysql8的授权模式有改动,需要先创建用户;
使用Docker来模拟两台服务器,原理和使用2台不同IP的服务器一样。
(二)perconaPercona 为 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-masterb)连接主库
## 进入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配置文件中默认就有的,如果你改变了也可以查看你改变的位置。



