跳到主要内容

Docker

2024年06月18日
柏拉文
越努力,越幸运

一、认识


通过 Docker 的方式实现 MySQL 主从复制、读写分离

二、主节点部署


docker run -d --name mysql-master -p 3306:3306 -v ~/docker/mysql/master/log:/var/log/mysql -v ~/docker/mysql/master/data:/var/lib/mysql -v ~/docker/mysql/master/conf:/etc/mysql -v ~/docker/mysql/master/mysql.conf.d:/etc/mysql/mysql.conf.d -v ~/docker/mysql/master/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root mysql/mysql-server

三、主节点配置


[client]
default-character-set=utf8
[mysqld]
init_connect="SET collation_connection = utf8_unicode_ci"
init_connect="SET NAMES utf8"
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

server_id=1
log-bin=mysql-bin
read-only=0
binlog-do-db=kubemsb_test

replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

四、从节点部署


docker run -d --name mysql-slave -p 3307:3306 -v ~/docker/mysql/slave/log:/var/log/mysql -v ~/docker/mysql/slave/data:/var/lib/mysql -v ~/docker/mysql/slave/conf:/etc/mysql -v ~/docker/mysql/slave/mysql.conf.d:/etc/mysql/mysql.conf.d -v ~/docker/mysql/slave/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root --link mysql-master:mysql-master mysql/mysql-server

五、从节点配置


[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect="SET collation_connection = utf8_unicode_ci"
init_connect="SET NAMES utf8"
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

server_id=2
log-bin=mysql-bin
read-only=1
binlog-do-db=kubemsb_test

replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

六、主节点数据库配置


连接数据库

mysql -u root -p 

6.1 更新 Host

1. 修改 mysql 数据库中的 user 表的 root 用户 Host 地址: 将 root 用户的 Host 地址从默认的 @ 修改为 % 任意的 IP 地址。

update user set Host='%' where User='root';   

2. 修改 mysql 数据库中的 user 表的 root 用户密码为 root

alter user 'root'@'%' identified with mysql_native_password by 'root';

6.2 授权从节点

1. 创建一个名为 backup 的用户, 可以从任何主机连接,并设置一个安全的密码

create user 'backup'@'%' identified with mysql_native_password by '123456';

2. 授权该用户 replication slave 权限,使其可以作为复制从服务器连接到主服务器

grant replication slave on *.* to 'backup'@'%';

3. 刷新权限

flush privileges;

4. 重启容器,使其配置生效

docker restart mysql-master

4. 重新进入主节点 MySQL

docker exec -it mysql-master bash;

mysql -u root -p

show master status;

七、从节点数据库配置


首先重启从节点 Docker 中的 MySQL 服务

docker restart mysql-slave 

7.1 更新 Host

1. 修改 mysql 数据库中的 user 表的 root 用户 Host 地址: 将 root 用户的 Host 地址从默认的 @ 修改为 % 任意的 IP 地址。

update user set Host='%' where User='root';   

flush privileges;

2. 修改 mysql 数据库中的 user 表的 root 用户密码为 root

alter user 'root'@'%' identified with mysql_native_password by 'root';

flush privileges;

7.2 改变 Master

change master to master_host='mysql-master', master_user='backup', master_password='123456', master_log_file='mysql-bin.000002', master_log_pos=156, master_port=3306;

7.3 开启 Slave

start slave;

查看从节点状态

show slave status\G;

八、验证主从数据库


8.1 主节点数据库添加数据库

docker exec -it mysql-master bash; // 进入 Docker mysql-master 节点数据库

mysql -u root -p // 进入 mysql

create database kubemsb_test; // 创建 kubemsb_test 数据库

8.2 从节点数据库查看数据库

docker exec -it mysql-master bash; // 进入 Docker mysql-master 节点数据库

mysql -u root -p // 进入 mysql

show databases; // 查看数据库, 查看是否有 kubemsb_test 数据库