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 数据库