本文基于已经下载完毕Docker的选手。
安装完毕Docker之后使用pull命令对mysql进行拉取。
docker pull mysql:5.7.25
拉取完毕之后使用如下命令查看是否拉取成功
docker images
安装完毕镜像之后,就可以开始启动mysql了。
这里需要知道的一点就是镜像启动之后变为的容器,如果没有进行数据卷备份,那么容器被完毕之后你mysql里的数据自动就丢失了,所以我们这里的mysql的主从复制将基于docker的数据卷技术。
首先使用如下命令配置主数据库,直接在控制台输入即可。
这里无需担心宿主机里没有mydata这个文件夹,docker的数据卷命令会自动创建不存在的文件夹。
docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
上面的命令输入完毕之后,就已经建立好了宿主机和docker容器mysql里的文件映射关系,我们直接在宿主机里进行文件的配置会直接映射到mysql中。
然后使用如下命令创建mysql的配置文件
vim /mydata/mysql-master/conf/my.cnf
然后在该配置文件中输入如下配置
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
保存退出后就可以重启mysql容器了
docker restart mysql-master
docker exec -it mysql-master bash
mysql -u root -p root # 登录mysql
create user 'slave'@'%' identified by '123456';
grant replication slave,replication client on *.* to 'slave'@'%';
到此位置主机配置完毕,开始从机的配置。
与主机的配置差不多,从机的配置也是先配置数据卷
docker run -p 3308:3306 --name mysql-slave \
-v /mydata/mysql-slave/log:/var/log/mysql \
-v /mydata/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
之后使用如下命令查看容器是否开启。
docker ps
然后继续使用如下命令进行从机的配置
vim /mydata/mysql-slave/conf/my.cnf
docker restart mysql-slave
然后进入从数据库
docker exec -it mysql-slave bash
mysql -u root -p root
之后进入主数据库查看主数据库状态
show master status;
change master to master_host='192.168.146.119', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000002', master_log_pos=1032, master_connect_retry=30;
其中host要改为你主机的ip地址,log_file和log_pos也要使用你主机的属性
这里默认大家了解mysql的主从复制
show slave status\G;
两个no说明此时还没开启主从复制,在从数据库中输入开启主从复制
start slave;
到此位置主从复制已经开启了,此时需要进行测试。
主从复制此时3307是主机,3308是从机,那么主机写入的数据会同步到从机,从机写入的数据不会同步到主机。
创建一个数据库和表,然后向表中插入数据。
主机的操作
从机的操作,从机也可以发现已经有数据了,你也可以向从机插入数据,会发现主机中并没有同步从机的数据,剩下的不多赘述,此时主从同步已经完成了。