mac docker mysql_Mac操作系统上使用Docker创建MySQL主从数据库

拉取MySQL镜像

## 下载最新版本的MySQL镜像

docker pull mysql

创建两个主从MySQL数据库容器

第一步,需要创建一个目录,用来存放与容器中配置文件对应的物理地址

目录结构如下:

7beb36a39470c007e3999a34b3f9abf5.png

master my.cnf配置文件内容如下:

[mysqld]

server_id = 1

log-bin= mysql-bin

read-only=0

replicate-ignore-db=mysql

replicate-ignore-db=sys

replicate-ignore-db=information_schema

replicate-ignore-db=performance_schema

slave my.cnf配置文件内容如下:

[mysqld]

server_id = 2

log-bin= mysql-bin

read-only=1

replicate-ignore-db=mysql

replicate-ignore-db=sys

replicate-ignore-db=information_schema

replicate-ignore-db=performance_schema

第二步,创建两个主从镜像,命令如下:

创建主数据库master

docker run --name mysql-master -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=yourpassword -v /Users/young/programs/docker_mysql/master/data:/var/lib/mysql -v /Users/young/programs/docker_mysql/master/conf/my.cnf:/etc/mysql/my.cnf -v /Users/young/programs/docker_mysql/master/mysql-files:/var/lib/mysql-files mysql:latest

创建从数据库slave

docker run --name mysql-slave -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=yourpassword -v /Users/young/programs/docker_mysql/slave/data:/var/lib/mysql -v /Users/young/programs/docker_mysql/slave/conf/my.cnf:/etc/mysql/my.cnf -v /Users/young/programs/docker_mysql/master/mysql-files:/var/lib/mysql-files mysql:latest

这里要注意,MySQL8以后,需要在映射文件中加入-v /Users/young/programs/docker_mysql/master/mysql-files:/var/lib/mysql-files,否则会创建失败。

配置主从数据库

配置主数据库master

//进入master容器

docker exec -it mysql-master bash

//进入mysql数据库,密码为前边设置的密码

mysql -u root -p

//创建一个用户来同步数据,每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE 权限。

//出现这个原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password

CREATE USER 'slave'@'%' IDENTIFIED BY 'your password';(这样有可能在slave创建与master连接时报错)

或者

CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'your password';

//对用户进行授权(复制权限)

GRANT REPLICATION SLAVE ON *.* to 'slave'@'%';

//查看状态,记住File、Position的值,在Slave中将用到

show master status;

//查询master容器的IP,会在slave设置主库连接时用到

docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master

配置从数据库slave

//进入slave容器

docker exec -it mysql-slave bash

//启动mysql命令

mysql -u root -p

//设置主库链接 change master to 语法参考[语法参考](https://blog.csdn.net/jesseyoung/article/details/41942809)

change master to master_host='本机ip',master_user='slave',master_password='your password',master_log_file='mysql-bin.000004',master_log_pos=master's position,master_port=3306;

//启动从库同步

start slave;

//查看状态

show slave status\G;

//如果 show slave status\G命令结果中出现:

//Slave_IO_Running: Yes

//Slave_SQL_Running: Yes

//以上两项都为Yes,那说明没问题了。

//否则,从新配置从数据

stop slave;

reset slave all;

注意,如果在查看slave状态时,提示Authentication plugin 'caching_sha2_password' cannot be loaded错误,出现这个原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,则要更改master数据库中密码的加密规则。所以,为了以防万一,在master创建用户来同步数据时,可以直接使用

CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'your password';

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于DockerMySQL主从数据库配置需要完成以下步骤: 1. 启动Master(主)容器:使用命令`docker run -p 3306:3306 --name main_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7`启动一个MySQL容器,并设置容器名称为main_mysql,密码为123456。 2. 连接到Master(主)容器:使用命令`docker exec -it main_mysql bash`进入Master(主)容器的命令行界面。 3. 配置Master(主):在Master(主)容器内部,编辑MySQL配置文件`my.cnf`,将`bind-address`设置为Master(主)容器的IP地址。 4. 重启Master(主)容器:使用命令`docker restart main_mysql`重启Master(主)容器使配置生效。 5. 启动Slave(从)容器:使用命令`docker run -p 3340:3306 --name slave_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7`启动一个MySQL容器,并设置容器名称为slave_mysql,密码为123456。 6. 连接到Slave(从)容器:使用命令`docker exec -it slave_mysql bash`进入Slave(从)容器的命令行界面。 7. 配置Slave(从):在Slave(从)容器内部,编辑MySQL配置文件`my.cnf`,将`bind-address`设置为Slave(从)容器的IP地址,并添加以下配置: ``` server-id = 2 relay-log = /var/lib/mysql/mysql-relay-bin relay-log-index = /var/lib/mysql/mysql-relay-bin.index log_slave_updates = 1 ``` 8. 重启Slave(从)容器:使用命令`docker restart slave_mysql`重启Slave(从)容器使配置生效。 9. 在Slave(从)容器内部执行以下命令连接到Master(主)容器并设置复制: ``` CHANGE MASTER TO MASTER_HOST='<Master(主)容器的IP地址>', MASTER_USER='root', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0; ``` 10. 启动复制:在Slave(从)容器内部执行命令`START SLAVE;`启动主从复制。 11. 检查主从复制状态:在Slave(从)容器内部执行命令`SHOW SLAVE STATUS\G;`,确保"Slave_IO_Running"和"Slave_SQL_Running"都为"YES",表示主从复制已成功配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值