数据库代理服务和集群管理
集群技术
数据库集群环境配置
- 准备5个全新未安装MySQL且能互相通信的服务器,mater1,master2,salve1,salve2,mycat
- 分别z在master1\master2\slave1\slave2服务器傻瓜安装mysql,参考[https://www.cnblogs.com/xiaodunan/p/18239367]
- 配置域名解析
vim /etc/hosts
把hosts文件拷贝到其它的服务器
scp /etc/hosts IP:/etc/
案例1:一主一从(M-S)
数据库集群.mysql主服务器配置
- 主(master1)
(1)部署一台新mysql服务器,准备好域名解析
(2)准备数据1(验证主从同步使用)
create database master1db;
create table master1db.master1tab(name char(50));
desc master1db.master1tab;
insert into master1db.master1tab values (111111);
insert into master1db.master1tab values (222222);
select * from master1db.master1tab;
(3)开启二进制日志
- 配置文件
vim /etc/my.cnf
log_bin
server-id=1
- 重启mysql
systemctl restart mysqld
(4)创建复制用户,用于从服务器访问使用
create user 'rep'@'10.18.41.%' identified by '密码';
grant replication slave,replication client on *.* to 'rep'@'10.18.41.%';
(5)备份master数据库的数据
mysqldump -uroot -p'密码' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F`-mysql-all.sql
(6)准备数据2(验证主从同步使用)
insert into master1db.master1tab values(33333);
insert into master1db.master1tab values(44444);
select * from master1db.master1tab;
数据库集群.mysql从服务器配置
- 从(master2)
(1)测试rep用户是否可用
mysql -h master1 -urep -p'密码';
(2)启动服务器序号
- 配置文件
vim /etc/my.cnf
server-id=2
- 重启mysql
- 测试rep用户是否可用
(3)手动同步数据 - 在主服务器master1把备份文件复制到从服务器master2
scp 2024-07-07-mysql-all.sql master2:/tmp/ #在master1上操作
- 设置数据库日志二进制关闭
mysql>set sql_log_bin=0; #在master2上操作
- 读取文件 ,在master2上操作
mysql> source /tmp/2024-07-07-mysql-all.sql;
- 检查数据是否同步,在master2上操作
select * from master1db.master1tab;
(4)设置主服务器,在master2上操作
mysql> change master to master_host='master1',master_user='rep',master_password='密码',master_log_file='localhost-bin.000002',master_log_pos=154;
# master_log_file和master_log_pos的值在master1使用`show master status;`命令查
(5)启动从服务器
mysql>start slave;
(6)查看启动状态(IO-YES/SQL-YES)
mysql>show slave status\G;
(7)返回主服务器(master1)更新数据,在从服务器(master2)观察是否同步
案例2:一主一从(M-S),主从自动协商
需求:
案例2与案例1需求基本相同。master1作为主mysql,master2作为从mysql,不同之处是使用了“gtid_mode=ON enforce_gtid_consistency=1”该属性自动记录position位置。不需要手动指定了。
环境:
因与案例1功能相同,只需要重置master2数据库重新配置即可
- 停止master2数据库
systemctl stop mysqld
- 删除数据
rm -rf /var/lib/mysql/*
- 启动数据库
systemctl start mysqld
- 查看默认密码
grep password /var/log/mysqld.log
- 修改数据库密码
mysqladmin -uroot -p'默认密码' password '新密码'
主
- 启动二进制日志,服务器ID,GTID
vim /etc/my.cnf
log_bin
server-id
gtid_mode=ON
enforce_gtid_consistency=1
- 重启服务器
systemctl restart mysqld
- 授权复制用户rep(案例1已做过,此处可以忽略)
- 备份数据
mysqldump -p'密码' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F-%H`-mysql-all.sql
scp 2023-7-11-mysql-all.sql master2:/tmp
- 模拟数据变化
mysql>insert into master1db.master1tab values (666666);
从
- 测试rep用户是否可用
mysql -h master1 -urep -p'密码'
- 启动二进制日志,服务器ID,GTID
vim /etc/my.cnf
log_bin
server-id=2
gtid_mode=ON
enforce_gtid_consistency=1
- 重启服务器
systemctl restart mysqld
- 手动恢复master1数据
set sql_log_bin=0; #临时关闭二进制日志
source /tmp/2024-7-11-mysql-full.sql
select * from master1db.master1tab;
- 设置主服务器
mysql> change master to
master_host='master1',
master_user='rep',
master_password='密码',
master_auto_position=1;
mysql> start slave;
mysql> show slave status\G;
- 返回主服务器(master1)更新数据,在从服务器(master2)观察是否同步