文章目录
1. 环境配置
当然如果是win10搭建MySQL8.0,一条主机搭建主从也是可以的,可以参考win10搭建主从
如下是我的主服务器配置
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3308端口
port = 3308
#唯一,要与从机的不同
server-id = 1
# Binary Logging.
#开启二进制日志
log-bin= mysql-bin-master
# 设置mysql的安装目录
basedir=D:\\mysql\\mysqlMaster
# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
# datadir=D:\\mysql\\mysqlMaster\\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
从服务器配置
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3309端口
port = 3309
log-bin=mysql-bin-slave
server_id=200
# 设置mysql的安装目录
basedir=D:\\mysql\\mysqlSlave
# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
# datadir=D:\\mysql\\mysqlSlave\\data
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
1.1 docker
1.2 Ubuntu16.04
1.3 MySQL版本是:8.0.16
2. 两台MySQL端口配置10000和10001,确认阿里云开启
2.2 为啥用10000和10001,因为3306已经开启了一个,被占用了
3. 在Linux上配置两台docker的server_id等配置
3.1 新建文件夹 /root/mysql/conf/master 并添加master.cnf文件
[mysqld]
log-bin=mysql-bin-master //启用二进制日志
server_id=100 //xxx代表唯一ID,默认是1。特别注意,当前版本这里是server_id而不是server-id,有些版本可能会不一样
3.2 新建文件夹 /root/mysql/conf/slave并添加slave.cnf文件
[mysqld]
log-bin=mysql-bin-slave
server_id=200
PS: 如果是在Windows上面安装的docker-desktop安装的则在自己的盘下面建两个文件夹也是可以的,比如我的是:
D:/SoftTools/docker/master
和D:/SoftTools/docker/slave
4. docker 运行两台MySQL
4.1 以10000端口运行第一台《主》,名字是:mysql-master并挂载刚才的配置文件
4.1.1 注意挂载位置一定是刚才你新建配置文件master.cnf的位置
4.1.2 注意MySQL版本是8.0.16并且两台MySQL的版本一定要一致
docker run --name mysql-master -v /root/mysql/conf/master:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 10000:3306 -d mysql:8.0.16 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
4.2 以10001端口运行第2台《从》,名字是:mysql-slave并挂载刚才的配置文件
4.2.1 注意两台MySQL的用户名和密码都是root
docker run --name mysql-slave -v /root/mysql/conf/slave:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 10001:3306 -d mysql:8.0.16 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
如果是windows安装的dockers,则可以
docker run --name mysql-master -v D:/SoftTools/docker/master:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 10000:3306 -d mysql:8.0.16 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
docker run --name mysql-slave -v D:/SoftTools/docker/slave:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 10001:3306 -d mysql:8.0.16 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
5. 配置主服务器,在主服务器新建从服务器的连接账号
建议直接往下看5.1 ,这个先别用
// 1.进入主库容器
docker exec -it mysql-master bash
// 2.登录mysql
mysql -uroot -proot
// 3.rep表示复制账号;<salve_ip>可修改为%,代表任意的主机;`IDENTIFIED BY`后面代表rep用户的认证密码
CREATE USER 'rep'@'<salve_ip>' IDENTIFIED WITH mysql_native_password BY 'reppassword';
GRANT REPLICATION SLAVE ON *.* TO 'rep'@'<salve_ip>';
5.1 推荐直接用下面的这个,因为两台MySQL在一台服务器上面
// 1.进入主库容器
docker exec -it mysql-master bash
// 2.登录mysql
mysql -uroot -proot
// 3.rep表示复制账号;<salve_ip>可修改为%,代表任意的主机;`IDENTIFIED BY`后面代表rep用户的认证密码
CREATE USER 'rep'@'%' IDENTIFIED WITH mysql_native_password BY 'rep';
GRANT REPLICATION SLAVE ON *.* TO 'rep'@'%';
5.2 获取主服务器相关信息,记录File和Position值
show master status;
+-------------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------------+----------+--------------+------------------+-------------------+
| mysql-bin-master.000003 | 656 | | | |
+-------------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
6. 配置从服务器
// 1.进入从库容器
docker exec -it mysql-slave bash
// 2.登录mysql
mysql -uroot -proot
不要直接复制,先看6.1
// 3.配置主库认证信息,<File>和<Position>同上
CHANGE MASTER TO MASTER_HOST='<master_ip>',MASTER_PORT=10000,MASTER_USER='rep',MASTER_PASSWORD='reppassword',MASTER_LOG_FILE=