docker学习 +mysql主从同步
操作系统 :CentOS Linux release 7.6.1810 (Core)
首先安装docker, yum install docker ,如果是ubuntu,需要安装 docker 和docker.io
安装完成, 启用docker ,service docker start
然后可以查看docker 镜像 : docker images。
切换docker镜像源, vi /etc/docker/daemon.json ,修改如下:
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
然后保存,重启docker service docker restart
==== docker 安装mysql 5.7 ====
下载docker镜像, docker pull mysql:5.7
创建本地映射目录:
mkdir -p /root/mysql/data /root/mysql/logs /root/mysql/conf
在/root/mysql/conf中创建 *.cnf 文件(叫什么都行)
touch my.cnf
创建容器,并将配置文件映射到 主机
docker run -p 3307:3306 --name mysql -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/logs:/logs -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
-p 将容器的3306端口映射到主机 3307端口上
-d 后台运行
-v 将主机目录挂载到容器的目录
如果想进入容器,则可以执行命令: docker ps 查看容器列表
然后根据执行: docker exec -it 容器id /bin/bash 进入操作
========mysql主从同步配置===========
利用docker启用两个容器,分别挂载到两个目录, /root/mysql_master 和 /root/mysql_slave
首先需要开启主库记录日志功能:使用命令:
show variables like '%log_bin%' 如果 log_bin 是OFF,则进行如下配置
修改master配置, my.cnf 增加如下配置:
[mysqld]
log-bin=/var/lib/mysql/master-bin
server-id=1
然后再执行 show variables like '%log_bin%' 命令如下:
然后也可以用命令:show master status; 查看,可以看到已经有了日志文件
在主库创建从库用账号:
GRANT REPLICATION SLAVE ON *.* TO '用户名'@'slave数据库的IP地址' IDENTIFIED BY '密码';
然后同样方法先开启slave库的日志, 然后将 slave 指向master
CHANGE MASTER TO MASTER_HOST='127.0.0.1',MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='master-bin.000001',MASTER_LOG_POS=154;
然后从库可以使用 show slave status;
查看从库链接状态,主要是
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
即说明同步成功。
如果有问题,可以在从库服务器使用命令测试连接主库:如下:
mysql -uslave -p123456 -h192.168.0.2
注意点
1)开启了主从复制,slave库如果写入数据的话,可能导致数据回滚从而主从复制线程中断,可以通过以下方式解决:
mysql> stop slave; mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; mysql> start slave;
2)如果要停止slave的复制可以使用命令:
mysql>stop slave;
3)由于主从复制是基于I/O的日志,所以会存在一定延时,如果对数据一致性要求非常高的话,简单的主从复制在实际环境中会存在问题