数据库集群 ——一主一从、 双主、双主双从

tech2024-07-03  64

集群技术

1、在主库上把数据更改(DDL DML DCL)记录到二进制日志(Binary Log)中。

2、备库I/O线程将主库上的日志复制到自己的中继日志(Relay Log)中。

3.、备库SQL线程读取中继日志中的事件,将其重放到备库数据库之上。

一、一主一从(M-S) ( 自动 )

设置master1为master2的主服务器

1、一主master1

(1) 启动二进制日志,服务器ID,GTID

vim /etc/my.cnf // 更改配置文件,开启二进制 log_bin // 二进制开启 server-id=1 // 服务器 ID gtid_mode=ON // gtid的模式为 开 enforce_gtid_consistency=1 // 存 主从 信息的临时表 强制开启

(2)重新启动数据库,让配置生效

systemctl restart mysqld // 重新启动 数据库

(3)授权复制用户 rep

grant replication slave,replication client on *.* to 'rep'@'10.8.162.%' identified by 'QianFeng@123'; 授权 flush privileges; 手动刷新

(4)备份数据

mysqldump -p'QianFeng@123' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F-%H`-mysql-all.sql 备份 主服务器 数据库内容 scp 2020-1-1-mysql-all.sql master2:/tmp 备份内容拷贝到 从 服务器

2、一从master2

(1)启动二进制日志,服务器ID,GTID

(2)重新启动数据库,让配置生效

(3)还恢复手动同步数据

set sql_log_bin=0; 临时关闭二进制 source /tmp/2020-1-1-mysql-full.sql 恢复还原 主数据库 数据内容 该实验的关键效果即将出现。

(4)在 从 上设置主服务器

mysql> change master to master_host='master1', 主服务器名( 没做域名解析的话,可以写 IP ) master_user='rep', 主库的授权用户为 rep master_password='QianFeng@123', 授权用户 rep 登录数据库的密码是 QianFeng@123 master_auto_position=1; 主库 自动位置 开启

(5)启动 从

start slave; 启动 从 show slave status\G; 查看 从 状态是否为双 YES

(6)验证

在 主 上 创库 创表 改数据 ,在 从 上查看 数据是否同步。  同步即为 一主一从集群 成功!

二、双主(M-M)

接着上面的实验 —— 一主一从 继续做 双主 。

设置master2为master1的主服务器

1、在master2 上进行授权

(1)授权复制用户 rep

2、master1

(1)在 从 上设置 主 服务器

(2)启动 从 master1

(3)如果状态不佳,重启一下 主 master2 的mysqld

master2 退出数据库 systemctl restart mysqld // master2 重新启动数据库 master1 退出数据库 master1 再进入数据库 show slave status\G // master1 再次查看状态

三、双主双从

接着上面的实验 —— 双主 继续做 双主双从 。

设置master1和master2主服务器

设置 slave1 和 slave2  从服务器

1、同步现有数据库

(1)master1  备份

mysqldump -p'QianFeng@123' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F`-mysql-all.sql 主库 master1 备份内容 ( 已经是双主,只备份一个库即可 )

slave1 和 slave2  从服务器操作一样

(2)slave 1 导入数据库 主库 备份内容

scp -r 2020-1-1-mysql-all.sql slave1:/tmp

(3)启动 slave 1 从服务器ID,gtid

vim /etc/my.cnf server-id=3 gtid_mode=ON enforce_gtid_consistency=1 master-info-repository=TABLE relay-log-info-repository=TABLE 把主的信息存在主信息仓库里。主信息库可以是文件也可以上表,具体由—master-info-repository参数值决定。—master-info-repository=file时 会生成master.info 和 relay-log.info2个文件,如果—master-info-repository=table,信息就会存在mysql.master_slave_info表中。

(4)重新启动数据库,让配置生效

systemctl restart mysqld

(5)设置主服务器

mysql> change master to // master 1 设置主服务器 master_host='10.8.162.14', master_user='rep', master_password='QianFeng@123', master_auto_position=1 for channel '10.8.162.14'; mysql> change master to // master 2 设置主服务器 master_host='10.8.162.81', master_user='rep', master_password='QianFeng@123', master_auto_position=1 for channel '10.8.162.81';

(6)启动 从 slave 1

双主一从 成功了。

slave1 和 slave2  从服务器操作一样

 

最新回复(0)