引用地址:https://blog.csdn.net/qq_35755863/article/details/99095867
Mysql主从复制的配置(docker),这里是记录了下自己在配置主从复制时遇到的一些问题,基本思路都是依照上述引用地址的文章配置的。
1.说明
①我这里使用版本是Mysql5.6。Mysql5.6的my.cnf文件默认是在/etc/mysql下。
②这里我使用docker模拟出多个Mysql的场景。
注:docker模拟出来的容器里是没有vi或vim的,解决方法:
apt-get update
apt-get install vim
2.Docker模拟出多个Mysql服务器
先拉取镜像
docker pull mysql5.6
再启动容器
docker run --name mysql_master -p 3306:3306 -v F:/docker/mysql:/docker -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
--name mysql_master:给容器起个名字叫mysql_master
-p 3306:3306: 将容器中的3306端口映射到主机的3306端口
-v F:/docker/mysql:/docker: 将主机的F:/docker/mysql目录挂载到容器的/docker(下面会用到这个设置)
-e MYSQL_ROOT_PASSWORD=123456: 设置mysql的root用户的密码为123456
进入容器:
点击上述按钮进入,或是使用命令进入容器:
docker exec -it 555 /bin/bash
修改容器里mysql的配置文件:
# 复制mysqld.cnf文件到/docker文件夹(在进行复制前需要先退出)
cp /etc/mysql/mysql.conf.d/mysqld.cnf /docker/mysqld.cnf
在本机上修改刚才复制的文件,文件就保存在上面启动容器时设置的挂载目录下。再在容器中将刚才修改后的文件覆盖回去。
cp /docker/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf
重启容器
3.我遇到的一些问题导致主从同步不了
a、mysql配置主从关系时的语句master_log_pos的值到底填写什么?
关于MYSQL的主从配置,一般顺序是:
#先查看MASTER的状态:
show master status
#然后在从机器上面执行SQL语句,建立联系
模板语句是:
change master to master_host='172.17.0.2',
master_user='root',
master_password='123456',
master_log_file='mysql-bin.000007',
master_log_pos=2566;
此时,master_log_pos其实还有更多的赋值方法,就是直接如下:
change master to master_host='172.17.0.2',
master_user='root',
master_password='123456',
master_log_file='mysql-bin.000007',
master_log_pos=0;
看清楚,master_log_pos=0;就是这么简单,系统会自动匹配的,有图为证:
图中,Read_Master_Log_Pos: 2566已经显示出来了。
更重要的是,
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
b、show slave status,两个状态值为No;
这里是No,而不是Yes,所以主从没有同步;解决方法(重启下slave):
stop slave;
start slave;
c、auto.cnf 配置问题
当mysql做了主从时,每个mysql都会有个uuid 作为唯一标识的。上面是由于主从复制mysql数据库了相同的UUID,所以,只需要修改auto.cnf配置文件即可
<1>查找auto.cnf文件的位置(位置一般为:/var/lib/mysql/auto.cnf)
<2>将文件中的uuid修改为不同数值。
4.主从同步,但是从数据库不做删除操作怎么实现?
设置一个没有delete权限的帐号
再绑定从库时设置的账号密码为该账号。