在使用docker搭建一次msyql的主从复制时,外部配置文件配置了不同的server-id,如下图:
主机:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
server-id=1
binlog_format=STATEMENT
init_connect=' SET collation_connection = utf8_unicode_ci '
init_connect=' SET NAMES utf8 '
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
从机:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
server-id=3
binlog_format=STATEMENT
init_connect=' SET collation_connection = utf8_unicode_ci '
init_connect=' SET NAMES utf8 '
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
本人将MySQL的配置文件挂载到了外部的MySQL的conf目录下。启动时使用docker命令:
docker run -p 3306:3306 --name mysql \
-v /home/用户名/mysql/log:/var/log/mysql \
-v /home/用户名/mysql/data:/var/lib/mysql \
-v /home/用户名/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:latest
当我自信满满查看从机连接状态时 ,不出意外还是出意外了,他竟然报错了
大概的意思主机和从机有一样的server_id,需要配置不同的server_id,我记得我明明配置的从机的id是3啊,主机是1,怎么会一样呢,于是我进入从机MySQL查看server_id:
不对啊 我明明在外面配置的server_id=3啊 怎么会显示是1呢?离了个大谱啊,我起初怀疑是我启动时挂载的配置文件没有生效,于是我在auto.con中改了MySQL的uuid
[root@slave2 data]# cat auto.cnf
[auto]
server-uuid=93b7f941-8bde-11ed-8fba-0242ac110005
之后进容器内部查看uuid
不对,一样啊,我的配置文件生效了啊,一样的启动方式,为什么server_id没有生效,离大谱啊,我怀疑是不是配置文件没有加载到容器内部,于是我又进入容器目录下 /etc/mysql/mysql.conf 就是我挂载的那个目录查看
明明改了啊,为什么没有加载到呢,我苦思不得其原因,片刻之后,我灵光一现,既然没有加载到,会不会是他背着我加载了其他的配置类,于是我就去查了下MySQL配置文件的启动顺序
/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/mysql/etc/my.cnf
~/.my.cnf
其他自定义路径下的my.cnf,例如:/data/mysql/yejr_3306/my.cnf
果然啊,我加载的是/etc/mysql下的配置文件,他的优先级不是最高的,我尝试将/etc/my.cnf挂载到外部并进行配置,重新启动
docker run -p 3307:3306 --name mysql \
-v /home/用户名/mysql/log:/var/log/mysql \
-v /home/用户名/mysql/data:/var/lib/mysql \
-v /home/用户名/mysql/conf:/etc/mysql/conf.d \
-v /home/用户名/mysql/my.cnf:/etc/mysql/my.cnf \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:latest
之后就成功了,我就不贴图了,到此也就结束了,希望我的这次经历可以给各位看官大佬帮助。