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;