mysql小集群

初学者的一些笔记,有不妥的地方,请多多包涵。

本人在虚拟机上,用 docker 安装了 四台 mysql : 


**********************************************************************************************************
1、 配置各个 msyql 服务的 my.cnf :

两台主机:
除常规配置外:
master1 配置:
server-id=1
log-bin=master1_3306_log
binlog-do-db=testdb
relay_log=testdb_relay-bin
sync_binlog=1
log-slave-updates=1

注释:

log-bin 为 master的日志;

binlog-do-db 为 需要同步的库名

relay_log 为 中继日志

sync_binlog 表示没几次事务进行提交, mysql 把binlog缓存刷进日志文件,满一定的事务后进行提交

log-slave-update=1 表示, M1 ,和 M2 主主复制后, 是否对 各自主节点下的 从节点进行 复制;



两台从机:
配置 read_only=1 只读属性
1.read_only=1只读模式,不会影响slave同步复制的功能,所以在MySQL slave库中设定了read_only=1后,通过 show slave status\G 命令查看salve状态,可以看到salve仍然会读取master上的日志,并且在slave库中应用日志,保证主从数据库同步一致;
      2.read_only=1只读模式,可以限定普通用户进行数据修改的操作,但不会限定具有super权限的用户的数据修改操作;在MySQL中设置read_only=1后,普通的应用用户进行insert、update、delete等会产生数据变化的DML操作时,都会报出数据库处于只读模式不能发生数据变化的错误,但具有super权限的用户,例如在本地或远程通过root用户登录到数据库,还是可以进行数据变化的DML操作;

**********************************************************************************************************

2、 使用 docker 安装根据 my.cnf 安装各个数据库
docker run --name master1_3306 --network host -v /data/master1_3306/my.cnf: /etc/ my .cnf   -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --character-set-server=utf8 --collation-server=utf8_general_ci

*********************************************************************************************************

3、 在各个库中创建测试使用的 testdb 库;
并在各个库中创建 同步使用的 用户;

grant all privileges on *.* to 'repl1'@'localhost' identified by '123456';
grant all privileges on *.* to 'repl1'@'%' identified by '123456';

flush privileges;


注意:
1、不仅要授权 % 还要授权 localhost ,否则 %无法生效
2、 grant all privileges on testdb.* to 'repl1'@'%' identified by '123456';
利用用户权限对 主从复制做 库的控制是不可取的,会导致:

show slave status中Slave_IO_State: Waiting to reconnect after a failed registration on master

从侧面也可以看出,主从复制,要求的操作权限为 : *.*

***********************************************************************************************************

4、 将 主库 关闭,防止新数据的写入,造成 log pos 的改变

加锁:
flush tables with read lock;


***********************************************************************************************************
5、 两个主机互为主从:
通过 show master status 查看各个主机的 log file 日志文件名 和 log pos 日志起始位置

3306主机: 用户为: repl1

3307主机: 用户为: repl2


3306 主机(主) 3307 主机(从):
在 3307 上执行:
mysql> CHANGE MASTER TO -> MASTER_HOST= '127.0.0.1' ,
-> MASTER_PORT= 3306 , -> MASTER_USER= 'repl1' , -> MASTER_PASSWORD= '123456' , -> MASTER_LOG_FILE= 'mysql-bin.000003' , -> MASTER_LOG_POS= 3917 ;

start slave; 启动主从复制

3306 主机(从) 3307 主机(主):
在 3306 上执行:
mysql> CHANGE MASTER TO -> MASTER_HOST= '127.0.0.1' ,
-> MASTER_PORT= 3307 , -> MASTER_USER= 'repl2' , -> MASTER_PASSWORD= '123456' , -> MASTER_LOG_FILE= 'mysql-bin.000003' , -> MASTER_LOG_POS= 3990 ;

start slave;

解锁:
unlock tables;

检查是否已经解锁完成
show OPEN TABLES where In_use > 0;

***********************************************************************************************************

6、为每个主Mysql,增添一个从mysql:
注意:以下操作模拟生产中,主库中已经存在了数据时,增添 slave 节点:


3308 从 复制 3306 主
相同的步骤:
(1) 将主库锁定,
flush tables with read lock;

查询 master status;

实验: 在锁定 3306 时, 修改 3307 数据,模拟实际生产环境
在 3307 修改数据后, 3306 由于加锁,因此 等待全局锁
注意: 由于 这两个全局锁是 隐式提交的,因此要维持锁的存在,必须保持会话窗口,请注意


(2) 导出 3306 已经存在的历史数据,并将这些数据导入到 3308 中;

导出3306数据:
mysqldump -h127.0.0.1 -P3306 -uroot testdb(数据库名称) -p123456
>/data/backup/testdb.sql

导入数据到 3308:
进入到 3308 中:
mysql -h127.0.0.1 -P3308 -uroot -p

使用testdb数据库,如果没有的话,需要创建一个;
use testdb;

执行:
source /data/backup/testdb.sql



(3) 在 3308 从服务上,进行主从复制设定;
stop slave;
reset slave; 重置从节点的配置信息;

mysql> CHANGE MASTER TO -> MASTER_HOST= '127.0.0.1' ,
-> MASTER_PORT= 3306 , -> MASTER_USER= 'repl1' , -> MASTER_PASSWORD= '123456' , -> MASTER_LOG_FILE= 'mysql-bin.000004' , -> MASTER_LOG_POS= 1387 ;

start slave;

show slave status;

(4) 放开锁
unlock tables;

可以看到放开锁后, 3307 修改的内容,会自动同步到 3306 上; 不用担心因为加锁,而导致主从同步上的错误;

同时,验证 3306 下 新挂载的 从服务 3308 也同样进行了同步;

验证 3308 的写操作是否关闭:
















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值