docker-mysql(集群)
第一步:安装docker+并获取mysql镜像
第二步:运行master的mysql容器
docker run -id \ --name=mysql_master \ -p 3307:3306 \ -v $PWD/mysql-master/conf:/etc/mysql/conf.d \ -v $PWD/mysql-master/logs:/logs \ -v $PWD/mysql-master/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql
命令比较简单。主要-v的使用,保证在容器挂了的时候,数据不会丢失。$PWD表示当前目录地址。
第三步,修改my.cnf配置文件
1.先copy到虚拟机目录上
docker cp 0a70ced7b5e1:/etc/my.cnf /Users/hicheer/
/Users/hicheer/ --虚拟机上的一个临时目录,要注意修改为自己的路径。
2 修改my.cnf文件
插入的代码:
log-bin=mysql-bin server-id=1
3在copy回去,覆盖原有mysql容器中原因配置,命令如下:注意目录和容器ID的替换。
docker cp /Users/hicheer/my.cnf 0a70ced7b5e1:/etc/
4重启一下容器。
docker restart 容器ID
第四步:新建一个用户,用来给从数据库访问主数据库。
进入mysql:docker exec -it mysql-master bash;mysql -uroot -p;输入密码即可。
新建用户命令:
grant replication slave on *.* to 'test'@'%' identified by '123456'; flush privileges;
下面是8.0版本使用的命令:
CREATE USER '用户名'@'从服务器IP地址' IDENTIFIED BY '密码';
GRANT REPLICATION SLAVE ON *.* TO '用户名'@'从服务器IP地址';
如果还是出现连接不上的问题,在客户端用test登录一下。
查看当前主数据库binglog日志状态
show master status;
这里主要看看两个参数:“File” 与 “Position” 记住并复制到记事本上,等下要用。
第五步:运行一个slave的mysql容器。
docker run -id \ --name=mysql_slave \ -p 3308:3306 \ -v $PWD/mysql-slave/conf:/etc/mysql/conf.d \ -v $PWD/mysql-slave/logs:/logs \ -v $PWD/mysql-slave/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql
同样的修改my.conf配置文件。
docker cp 8ca6a479d042:/etc/my.cnf /tmp/mysql-temp/ docker cp /tmp/mysql-temp/my.cnf 8ca6a479d042:/etc/
修改地方
log-bin=mysql-bin server-id=2
再重启一下当前容器。
docker restart 8ca6a479d042
第六步,设置从主关系
1 进入从容器内部。
docker exec -it 8ca6a479d042 bash
mysql -uroot -p --输入密码
2 准备从数据库连接主数据库内容.
1)获取主数据库容器的ip地址
docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)
用上面参数替换下面命令中的参数
change master to master_host='你的IP', master_user='test账户名', master_password='test账户密码', master_port=默认端口号, master_log_file='你保存的File参数值', master_log_pos=你保存的Position参数值, master_connect_retry=30;
开启主从复制
start slave;
查看是否开启
show slave status\G
但我这个一直在Connecting中。
参考地址:https://blog.csdn.net/weixin_49457704/article/details/127902985
2.