本文基于 Centos 7,Docker 模拟 mysql,redis 配合使用的集群
一. 搭建 mysql 集群
1. 编写 mysql 主服务器的配置文件和数据保存
vi /etc/mysql-m/conf/my.cnf
my.cnf 内容
[mysqld]
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
datadir=/var/lib/mysql
server-id=1
log-bin=mysql-master-bin
启动mysql主服务器
docker run -itd -p 3306:3306 --name mysql-m --privileged=true -e MYSQL_ROOT_PASSWORD=root -v /etc/mysql-m/conf:/etc/mysql/conf.d -v /etc/mysql-m/data:/var/lib/mysql mysql
查看主服务器容器ip
docker inspect mysql-m | grep IPAddress
# "IPAddress": "172.17.0.4"
查看主库 二进制文件 和 偏移量
docker exec -it mysql-m mysql -u root -p
show master status;
2. 编写 mysql 从服务器配置文件
vi /etc/mysql-s/conf/my.conf
[mysqld]
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
datadir=/var/lib/mysql
server-id=2
log-bin=mysql-slave-bin
启动从服务器
docker run -itd -p 3316:3306 --name mysql-s --privileged=true -e MYSQL_ROOT_PASSWORD=root -v /etc/mysql-s/conf:/etc/mysql/conf.d -v /etc/mysql-s/data:/var/lib/mysql mysql
3. 主从关系绑定
进入从库
docker exec -it mysql-s mysql -u root -p
绑定主从关系:配从不配主
master_log_pos 和 master_log_file 的值要与上面查到的主库状态值一致
change master to master_host='172.17.0.4',master_port=3306,master_user='root',master_password='root',master_log_pos=156,master_log_file='mysql-master-bin.000003';
# master_log_pos: Position
# master_log_file: File
启动主从复制
start slave;
查看主从复制状况
show slave status\G;
若 I/O_Running 线程和 SQL _Runing 线程都是 YES,则绑定成功