Docker中搭建MySQL8主从

1.  查看docker镜像

[root@iZbp1gj1ldq5y5im7bf304Z data]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql  

2.  后台启动mysql

docker run --name mysql_master --privileged=true -v /root/Docker/mysql/data:/var/lib/mysql -v /root/Docker/mysql/conf:/etc/mysql/conf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
在执行上述命令之后,docker首先会检测本地有没有目标镜像,即mysql-slaver,如果没有,则会下载该镜像,然后根据配置的参数运行该镜像。上述命令中各个参数的含义如下:
 
--name指定运行之后的容器的名称为mysql;
--privileged指定了当前容器是否真正的具有root权限,所谓的root权限是指具有宿主机的root权限,而不仅仅只是在容器内部有root权限;
-v指定了容器中指定目录挂载到宿主机上的某个目录,这样做的目的在于防止容器中配置的数据丢失,因为docker容器在重启之后是不会保留前一次在其内部运行的相关数据的;
-p表示宿主机上的某个端口映射到docker容器内的某个端口,这里也就是将宿主机的3306端口映射到容器内部的3306端口;
-e表示指定当前容器运行的环境变量,该变量一般在容器内部程序的配置文件中使用,而在外部运行容器指定该参数。这里的MYSQL_ROOT_PASSWORD表示容器内部的MySQL的启动密码;
-d参数指定了当前容器是在后台运行。

3. 查看启动后的mysql

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
a65af423bf5c        mysql               "docker-entrypoint.s…"   4 seconds ago       Up 4 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp   mysql-master

4.  进入mysql

docker exec -it a65af423bf5c bash

5. 在主宿主机上创建两个目录, master和slave。分别再次创建data和conf目录留作下面使用。

vim /root/Docker/mysql/master/conf/my.cnf
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
 
secure-file-priv= NULL
 
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
 
# 服务器唯一ID[主从这里设置不能相同]
server-id=11
 
# 启用二进制日志
log-bin=mysql-bin
 
# 最大连接数 
max_connections=10000
 
# 设置默认时区
default-time_zone='+8:00'
 
# 0:区分大小写
# 1:不区分大小写
lower_case_table_names=1
 
!includedir /etc/mysql/conf.d/

6. 启动主机

 docker run -d -p 3316:3306 \
--name mysql_master \
--restart=always \
-v /root/Docker/mysql/master/data:/var/lib/mysql \
-v /root/Docker/mysql/master/conf/my.cnf:/etc/mysql/my.cnf \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql

7. 启动从机

 docker run -d -p 3326:3306 \
--name mysql_slave1 \
--restart=always \
-v /root/Docker/mysql/slave/data:/var/lib/mysql \
-v /root/Docker/mysql/slave/conf/my.cnf:/etc/mysql/my.cnf \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql

8. 创建用户并授权

# 给予远程用户所有表所有权限
GRANT ALL ON *.* TO 'root'@'%';
 
# 更改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
 
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
 
# 刷新权限
flush privileges;

创建用户并授权复制 权限
create user 'bj'@'%' IDENTIFIED WITH mysql_native_password BY 'bj2016';
GRANT REPLICATION SLAVE ON *.* TO 'bj'@'%';

9. 查询master状态

show master status;

10. 更改slave

CHANGE MASTER TO
MASTER_HOST='114.55.59.128',
master_port = 3316,
MASTER_USER='bj',
MASTER_PASSWORD='bj2016',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=2598;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值