一、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_user 和 master_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