从 Docker 下拉取最新的 Mysql, 运行配置

1. 打开命令符, 拉取镜像文件

1
docker pull mysql

2. 运行镜像创建两个数据库:

mysql-1为主库(33061)
mysql-2为从库(33062)

–name 后面跟着的是容器的名字,自己可以自定义
-p 指的是端口映射 本机端口:容器端口,本人选用的本机端口是3306,可以根据自己情况选择端口
-e 指的是启动参数,这个MYSQL_ROOT_PASSWORD参数必须要传,否则等下登录不了MySQL, MYSQL_ROOT_PASSWORD意思是root用户的密码,大家可以自定义
-d 代表后台启动 后面跟的就是镜像的名字,因为之前拉取的时候就是docker pull mysql,所以这个写mysql,如果是 docker pull mysql:5.7 那么这里就是 -d msyql:5.7
1
2
3
4
5
docker run --name mysql-1 -p 33061:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0 
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

docker run --name mysql-2 -p 33062:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

3. 查看 Docker 镜像是否运行成功

1
docker ps

4. 在数据库连接上mysql

1
2
3
4
5
6
7
8
9
10
# 连接名
name: mysql-1
# 主机
localhost: 127.0.0.1
# 端口号
port: 33061
# 用户名
username: root
# 密码
password: root

主机配置

1. 在主机下配置用户, 授权给从机服务器

创建用户
打开mysql-1 console, ‘rep1’为从机登录用户名, 密码为 root, ‘%’代表不需要限制登录地址(也可另外设置)

1
CREATE USER 'rep1'@'%' IDENTIFIED BY 'root';

用户授权

1
GRANT Replication Slave ON *.* TO 'rep1'@'%';

2. 修改主库配置文件

桌面新建一个文件 “mysqld.cnf”

[mysqld]
log-bin=/var/lib/mysql/binlog
server-id=1
binlog-do-db = testdb
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
#log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
命令符中进入桌面, 把文件上传到 Docker配置里
1
docker cp ./mysqld.cnf mysql-1:/etc/mysql/mysql.conf.d/

重新启动 Mysql-1 服务端:

1
docker restart mysql-1

3. 确认主库配置是否成功

打开Nacvicat Premium, mysql-1服务端中:
console查询:

1
show master status;
binlog.000001
154
testdb

从机配置

1. 修改从库配置文件

桌面新建一个文件 “mysqld.cnf”
注意从机这里只需要配置一下 server-id 即可。

[mysqld]
server-id=2
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
#log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

2. 命令符中进入桌面, 把文件上传到 Docker配置里

1
docker cp ./mysqld.cnf mysql-2:/etc/mysql/mysql.conf.d/

重新启动 Mysql-2 服务端:

1
docker restart mysql-1

3. 进入 Mysql-2容器

1
docker exec -it mysql-2 /bin/bash

4. 登录 Mysql

1
mysql -u root -p

登陆密码Enter password: root

5. 使用命令配置从机

1
change master to master_host='192.168.101.218',master_port=33061,master_user='rep1',master_password='root',master_log_file='binlog.000001',master_log_pos=154,get_master_public_key=1;

这里配置主机地址、端口以及从机登录主机的用户名和密码,注意最后两个参数要和 master 中的保持一致。

6. 启动slave进程

1
start slave;

查看从机状态:

1
show slave status\G;

下面两项值都要为 YES,则表示配置正确:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

至此,配置完成,主机创建库,添加数据,从机会自动同步。
如果这两个有一个不为 YES ,表示主从环境搭建失败,此时可以阅读日志,查看出错的原因,再具体问题具体解决。