docker-mysql-cluster
docker-mysql-cluster
基于docker搭了个mysql集群,稍微记一下,
首先是新建mysql主库容docker run -d -e MYSQL_ROOT_PASSWORD=admin --name mysql-master -p 3307:3306 mysql:latest
-d
表示容器运行在后台,-e
表示设置环境变量,即MYSQL_ROOT_PASSWORD=admin
,设置了mysql的root密码,--name
表示容器名,-p
表示端口映射,将内部mysql:3306映射为外部的3307,最后的mysql:latest
表示镜像名
此外还可以用-v /local_path/my-master.cnf:/etc/mysql/my.cnf
来映射配置文件
然后同理启动从库docker run -d -e MYSQL_ROOT_PASSWORD=admin --name mysql-slave -p 3308:3306 mysql:latest
然后进入主库改下配置文件docker-enter mysql-master
如果无法进入就用docker ps -a
看下容器是否在正常运行,如果status显示
未正常运行,则用docker logs mysql-master
看下日志哪里出错了。
进入容器后,我这边使用的镜像的mysqld配置文件是在/etc/mysql
下面,这个最新版本的mysql的配置文件包含
三部分,/etc/mysql/my.cnf
和/etc/mysql/conf.d/mysql.cnf
,还有/etc/mysql/mysql.conf.d/mysqld.cnf
这里需要改的是最后一个,加上1
2log-bin = mysql-bin
server_id = 1
保存后退出容器重启主库容器,然后进入从库更改相同文件,1
2log-bin = mysql-bin
server_id = 2
主从配置
同样退出重启容器,然后是配置主从,首先进入主库,用命令mysql -u root -pxxxx进入mysql,然后赋予一个同步
权限GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by '123456';
还是同样说明下,ON *.*表示了数
据库全部的权限,如果要指定数据库/表的话可以使用类似testDb/testTable
,然后是'backup'@'%'
表示给予同步
权限的用户名及其主机ip,%表示不限制ip,当然如果有防火墙的话还是会有限制的,最后的identified by '123456'
表示同步用户的密码,然后就查看下主库的状态信息show master status
,如下图:
把file跟position记下来,然后再开一个terminal,进入从库容器,登陆mysql,然后设置主库1
2
3
4
5
6
7change master to
master_host='xxx.xxx.xxx.xxx', //如果主从库的容器都在同一个宿主机上,这里的ip是docker容器的ip
master_user='backup', //就是上面的赋予权限的用户
master_password='123456',
master_log_file='mysql-bin.000004', //主库中查看到的file
master_log_pos=312, //主库中查看到的position
master_port=3306; //如果是同一宿主机,这里使用真实的3306端口,3308及主库的3307是给外部连接使用的
通过docker-ip mysql-master
可以查看容器的ip
这里有一点是要注意的,也是我踩的坑,就是如果是同一宿主机下两个mysql容器互联,我这里只能通过docker-ip和真实
的3306端口能够连接成功。
本文参考了这位同学的文章