ProxySQL–基础–2.3–部署–准备测试环境–mysql1主2从
1、介绍
1.1、机器信息
名称 | Ip | Port | server_id |
---|---|---|---|
M1 | 192.168.187.88 | 3307 | 110 |
M1S1 | 192.168.187.88 | 3308 | 120 |
M1S2 | 192.168.187.88 | 3309 | 130 |
Proxysql | 192.168.187.88 | 6032,6033 | null |
1.2、架构图
1.3、Proxysql安装
ProxySQL--基础--2.1--部署--单机--RPM安装
Proxysql 机器 还需要安装mysql客户端
1.4、安装mysql客户端
https://blog.csdn.net/zhou920786312/article/details/134885681
2、mysql主从复制
- 注意点:slave节点需要设置read_only=1。如果后端是PXC/MGR/MariaDB Galera,则无需手动设置,因为会自动设置。
- 参考内容:https://blog.csdn.net/zhou920786312/article/details/122425205
2.1、启动服务
docker run --name M1 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7 ;
docker run --name M1S1 -p 3308:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7 ;
docker run --name M1S2 -p 3309:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7 ;
2.2、修改配置文件
2.2.1、新建配置文件
# 创建配置文件目录:
mkdir -p /home/hd/mysql_config
新建以下配置
vim m1.cnf
vim m1s1.cnf
vim m1s2.cnf
主机的配置 m1.cnf
[mysqld]
skip-host-cache
skip-name-resolve
# 服务器标识
server-id=110
# 日志文件
log-bin=master.bin
从机的配置 m1s1.cnf
[mysqld]
skip-host-cache
skip-name-resolve
# 服务器标识
server-id=120
read_only=1
从机的配置 m1s2.cnf
[mysqld]
skip-host-cache
skip-name-resolve
# 服务器标识
server-id=130
read_only=1
2.2.2、拷贝配置进去
docker cp m1s1.cnf M1S1:/etc/mysql/conf.d/mysql.cnf
docker cp m1s2.cnf M1S2:/etc/mysql/conf.d/mysql.cnf
docker cp m1.cnf M1:/etc/mysql/conf.d/mysql.cnf
2.2.3、重启mysql
docker restart M1 M1S1 M1S2
2.3、M1(主库)操作
进入mysql
# 进入容器
docker exec -it M1 bash ;
# 进入mysql
mysql -uroot -proot ;
创建用于主从复制的用户
# 创建用户
create user 'rep'@'%' identified by '123456';
# 给该用户授予权限:
grant replication slave on *.* to 'rep'@'%';
# 刷新权限
flush privileges;
至此:M1 里面已经创建了一个用户:rep 123456,拥有所有库,所有表replication slave
获取主库状态
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| master.000001 | 745 | | | |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
2.4、M1S1,M1S2(从库)操作
这里以M1S1为案例
进入mysql
# 进入容器
docker exec -it M1S1 bash
# 进入mysql
mysql -uroot -proot
连接主库
change master to master_host="192.168.187.88",master_port=3307,master_user="rep",master_password="123456",master_log_file="master.000001",master_log_pos=745;
并开启主从复制
start slave ;
查询主从的状态
show slave status \G;
# 这2个显示yes,表示成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
2.5、验证
主库(M1)
create database test;
3、创建测试数据
create database test1;
create database test2;
CREATE TABLE `test1`.`t1` (
`name` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `test1`.`t1`(`name`) VALUES ('test1--t1--数据1');
INSERT INTO `test1`.`t1`(`name`) VALUES ('test1--t1--数据2');
CREATE TABLE `test1`.`t2` (
`name` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `test1`.`t2`(`name`) VALUES ('test1--t2--数据1');
INSERT INTO `test1`.`t2`(`name`) VALUES ('test1--t2--数据2');
CREATE TABLE `test2`.`t1` (
`name` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `test2`.`t1`(`name`) VALUES ('test2--t1--数据1');
INSERT INTO `test2`.`t1`(`name`) VALUES ('test2--t1--数据2');
CREATE TABLE `test2`.`t2` (
`name` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `test2`.`t2`(`name`) VALUES ('test2--t2--数据1');
INSERT INTO `test2`.`t2`(`name`) VALUES ('test2--t2--数据2');