> 文章列表 > docker-mysql-主从设计

docker-mysql-主从设计

docker-mysql-主从设计

一、docker主从

1.新建主从镜像

docker run -p 3307:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.28
docker run -p 3308:3306 --name mysqlslave -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.28

2.分别进入两个容器,修改配置文件

#1.进入容器
$ docker exec -it mysql sh
$ docker exec -it mysqlslave sh
#2.分别安装vim
$ apt-get update
$ apt-get install vim
#3.mysql的配置
$ cd etc/mysql
$ vim my.cnf#填入以下内容[mysqld]#保证唯一性server-id=1 #开启binlog日志并设置文件名字log_bin=master-bin
#4.mysqlslave的配置
$ cd etc/mysql
$ vim my.cnf#填入以下内容[mysqld]#保证唯一性server-id=2#开启relay日志并设置文件名字relay_log=slave-relay	#5.重启容器 或 service mysql restart

3.在nv上操作

3.1查看mysql-master状态配置并进行连接,记录圈起来的部分

show master status;

在这里插入图片描述

3.2在mysql-slave执行sql语句

  • master_host :Master的地址,这儿需要的是容器在的独立IP 可以进入容器查看,也可执行docker指令查看:
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称/容器id
  • master_usermaster_password:用于同步的用户的密码,实际中肯定不能使用root用户
  • master_port:容器的端口,不是映射端口哦
  • master_log_file:指定 Slave 从哪个日志文件file开始复制数据
  • master_log_pos:从哪个 Position 开始读,都是对应master中的值
change master to master_host='172.17.0.2',
master_user='root',
master_password='root',
master_port=3306,
master_log_file='master-bin.000001',
master_log_pos= 1563;

启动slave

start slave;

查看从节点信息

show slave status

在这里插入图片描述

4.其他

这个主从架构师可能失败的,如果查看slave状态发现Slave_SQL_Running=no 就表示主从同步失败了,可能是在从库进行了些,导致从主库同步过来主键冲突。也可能是从库服务重启之后有事务回滚了。如果是从库事务回滚可以:

stop slave ;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; 
start slave ;

还可以重新设置主节点的binlog信息 重新指定position,可能需要处理一下从节点上面的数据

其他参数:

#master:
#需要同步的二进制数据库名 
binlog-do-db=masterdemo 
#只保留7天的二进制日志,以防磁盘被日志占满(可选) 
expire-logs-days = 7 
#不备份的数据库 
binlog-ignore-db=xxx1
binlog-ignore-db=xxx2#从库:
#如果master库名[mastdemo]与salve库名[mastdemo01]不同,使用以下配置[需要做映射] 
replicate-rewrite-db = xxx -> aaa
#如果不是要全部同步[默认全部同步],则指定需要同步的表 
replicate-wild-do-table=xxx1
replicate-wild-do-table=xxx2

煤炭价格网