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的日志,所以会存在一定延时,如果对数据一致性要求非常高的话,简单的主从复制在实际环境中会存在问题 

原文地址:https://www.cnblogs.com/zhanglifeng/p/13068264.html