有容乃大,无欲则刚
——容是别人,欲是自己 🙉🙉
文章目录
- 一、安装准备
- 1、前提条件
- 2、查看系统内核
- 3、查看已安装的CentOS版本信息
- 二、CentOS7安装docker
- 1、安装需要的软件包
- 2、设置docker下载镜像
- 3、更新yum软件包索引
- 4、安装docker ce
- 5、启动docker
- 6、版本验证
- 7、设置开机启动
- 8、卸载
- 三、 MySQL主从同步
- 1、MySQL主从同步原理
- 2、一主多从配置
- 2.1、准备主服务器
- 2.2、准备从服务器
- 2.3、启动主从同步
- 2.4、实现主从同步
- 2.5、停止和重置
- 2.6、常见问题
- 问题1
- 问题2
一、安装准备
1、前提条件
- Docker可以运行在Windows、Mac、CentOS、Ubuntu等操作系统上
- Docker支持以下的CentOS版本:
- CentOS 7 (64-bit)
- CentOS 6.5 (64-bit) 或更高的版本
- 目前,CentOS 仅发行版本中的内核支持 Docker
- Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。
- Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。
2、查看系统内核
uname命令用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)。
3、查看已安装的CentOS版本信息
二、CentOS7安装docker
安装手册:https://docs.docker.com/install/linux/docker-ce/centos(CE-社区版)
1、安装需要的软件包
yy -utils提供了yy-config-manager相关功能,device-mapper-persistent-data和lvm2是设备映射器驱动程序所需要的。
2、设置docker下载镜像
推荐阿里云下载地址
3、更新yum软件包索引
我们在更新或配置yum源之后,通常都会使用yum makecache 生成缓存,这个命令是将软件包信息提前在本地缓存一份,用来提高搜索安装软件的速度
4、安装docker ce
5、启动docker
6、版本验证
7、设置开机启动
8、卸载
三、 MySQL主从同步
1、MySQL主从同步原理
基本原理:
slave
会从master
读取binlog来进行数据同步
具体步骤:
-
step1:
master将数据改变记录到二进制日志(binary log)
中。 -
step2:
当slave上执行 start slave
命令之后,slave会创建一个 IO 线程
用来连接master,请求master中的binlog。 -
step3:
当slave连接master时,master会创建一个 log dump 线程
,用于发送 binlog 的内容。在读取 binlog 的内容的操作中,会对主节点上的 binlog 加锁,当读取完成并发送给从服务器后解锁。 -
step4:
IO 线程接收主节点 binlog dump 进程发来的更新之后,保存到 中继日志(relay log)
中。 -
step5:
slave的SQL线程
,读取relay log日志,并解析成具体操作,从而实现主从操作一致,最终数据一致。
2、一主多从配置
服务器规划:使用docker
方式创建,主从服务器IP一致,端口号不一致
,配置前先把相关端口开放
- 主服务器:容器名
mysql-master
,端口3306
- 从服务器:容器名
mysql-slave1
,端口3307
- 从服务器:容器名
mysql-slave2
,端口3308
注意: 如果此时防火墙是开启的,则先关闭防火墙,并重启docker
,否则后续安装的MySQL无法启动
2.1、准备主服务器
- step1:在docker中创建并启动MySQL主服务器:
端口3306
- step2:创建MySQL主服务器配置文件:
默认情况下MySQL的binlog日志是自动开启的,可以通过如下配置定义一些可选配置
配置如下内容
重启MySQL容器
binlog格式说明:
- binlog_format=STATEMENT:日志记录的是主机数据库的
写指令
,性能高,但是now()之类的函数以及获取系统参数的操作会出现主从数据不同步的问题。 - binlog_format=ROW(默认):日志记录的是主机数据库的
写后的数据
,批量操作时性能较差,解决now()
或者 user()
或者 @@hostname
等操作在主从机器上不一致的问题。 - binlog_format=MIXED:是以上两种level的混合使用,有函数用ROW,没函数用STATEMENT,但是无法识别系统变量
binlog-ignore-db和binlog-do-db的优先级问题:
- step3:使用命令行登录MySQL主服务器:
- step4:主机中创建slave用户:
- step5:主机中查询master状态:
执行完此步骤后不要再操作主服务器MYSQL
,防止主服务器状态值变化
记下File
和Position
的值。执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化。
2.2、准备从服务器
可以配置多台从机slave1、slave2…,这里以配置slave1为例
- step1:在docker中创建并启动MySQL从服务器:
端口3307
- step2:创建MySQL从服务器配置文件:
配置如下内容:
重启MySQL容器
- step3:使用命令行登录MySQL从服务器:
- step4:在从机上配置主从关系:
在从机上执行以下SQL操作
2.3、启动主从同步
启动从机的复制功能,执行SQL:
两个关键进程: 下面两个参数都是Yes,则说明主从配置成功!
2.4、实现主从同步
在主机中执行以下SQL,在从机中查看数据库、表和数据是否已经被同步
2.5、停止和重置
需要的时候,可以使用如下SQL语句
2.6、常见问题
问题1
启动主从同步后,常见错误是Slave_IO_Running: No 或者 Connecting
的情况,此时查看下方的 Last_IO_ERROR
错误日志,根据日志中显示的错误信息在网上搜索解决方案即可
典型的错误例如:Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from position > file size'
解决方案:
问题2
启动docker容器后提示 WARNING: IPv4 forwarding is disabled. Networking will not work.
此错误,虽然不影响主从同步的搭建,但是如果想从远程客户端通过以下方式连接docker中的MySQL则没法连接
解决方案:
到此,本章内容就介绍完啦,如果有帮助到你 欢迎点个赞👍👍👍吧!!您的鼓励是博主的最大动力! 有问题评论区交流。