赞
踩
所谓集群,就是将多台服务器集中在一起,同时处理用户对服务器的请求
比如,我们现在开启的这一台mysql服务器,可以同时处理1000个用户的请求,那么我们开启两个这样的服务器,就可以同时处理2000
数据库集群之间最重要的是数据一致性
Replication
集群图示:
类型:
M
M-S
M-S-S…
M-M
M-M-S-S
M表示主服务器
S表示从服务器
需要从主服务器备份到从服务器,即主从复制
我们需要通过配置,完成自动的主从复制
原理图示:
图示1
概念:
环境三部曲
配置静态ip
2台服务器ip分别是
192.168.145.141
192.168.145.142
配置mysql8.0yum源头
141服务器操作如下:
在19服务器下操作: wget https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm yum install mysql80-community-release-el9-1.noarch.rpm yum install mysql-community-server --downloadonly -y find / -iname "*mysql*.rpm" //查找包的位置 cd /var/cache/dnf/mysql80-community-22d3d3ecd3d92106/packages/ scp ./*.rpm 192.168.145.142:~/ 141安装mysql yum install -y *.rpm 启动数据库 systemctl start mysqld grep 'password' /var/log/mysqld.log mysqladmin -uroot -p'复制的密码' password "Lixinyi@123" mysql -uroot -p'Lixinyi@123'; show databases; 其他同理
142:
[root@localhost ~]# ls
anaconda-ks.cfg mysql-community-common-8.0.38-1.el9.x86_64.rpm
install_mysql.sh mysql-community-icu-data-files-8.0.38-1.el9.x86_64.rpm
mysql-community-client-8.0.38-1.el9.x86_64.rpm mysql-community-libs-8.0.38-1.el9.x86_64.rpm
mysql-community-client-plugins-8.0.38-1.el9.x86_64.rpm mysql-community-server-8.0.38-1.el9.x86_64.rpm
[root@localhost ~]# chmod +x install_mysql.sh
//开始安装
[root@localhost ~]# ./install_mysql.sh
主(master1)
部署一台新mysql服务器。准备好域名解析。
准备数据1(验证主从同步使用)
master1
create database master1db;
create table master1db.master1tab(name char(50));
insert into master1db.master1tab values (1111);
insert into master1db.master1tab values (2222);
开启二进制日志
master1
[root@localhost ~]# vim /etc/my.cnf
log_bin
server-id=1
[root@localhost ~]# systemctl restart mysqld
重启生效
---------------------------------------------
log_bin 开启二进制日志
server-id 集群中二进制的编号 不要重复
创建复制用户
创建用户:
mysql> create user 'rep'@'192.168.145.%' identified by 'Lixinyi@123';
授权:
mysql>grant replication slave, replication client on *.* to 'rep'@'192.168.145.%' ;
下面是这条命令的详细解释:
grant: 这是SQL的关键字,用于授权用户特定的权限。
replication slave: 这个权限允许用户请求在主服务器复制二进制日志事件到从服务器,这通常用于MySQL的主从复制功能。
replication client: 这个权限允许用户查询主服务器或从服务器的状态,以及执行SHOW SLAVE
STATUS和SHOW MASTER STATUS等命令。
on *.*: 这表示对所有数据库和所有表进行授权。
to ‘rep’@‘192.168.229.%’: 这表示将权限授予用户名为rep的用户,并且这个用户可以从192.168.229.*这个IP地址范围内的任何主机连接到MySQL服务器。这里的%是一个通配符,表示匹配该IP段内的任何具体IP地址。
简而言之,这条命令的意思是:“为从192.168.229.*这个IP地址范围内的任何主机连接到MySQL服务器的rep用户授予复制从服务器和复制客户端的权限”。这通常用于设置MySQL的主从复制功能,其中rep用户将用于从主服务器复制数据到从服务器。
备份master数据库的数据
master1
刚才是先添加的数据,然后才开启的二进制日志。二进制日志中没有记录一开始添加数据的记录。
所以需要我们对之前的数据先进行一个手动备份
退出mysql登陆页
mysqldump -uroot -p'Lixinyi@123' --all-databases --single-transaction --master-data=2 --flush-logs > `date +"%F-%H"`-mysql-all.sql
# ls
2024-07-15-14-mysql-all.sql
注释:
--single-transaction 保持服务的可以用性,服务保持开机状态
master-data=2 帮我开启记录 记录二进制节点的位置
--flush-logs 刷新二进制日志 对二进制日志进行分割
发送给另一台主机:
scp -r ./2024-07-15-14-mysql-all.sql 192.168.145.142:/tmp
观察二进制日志分割点:
vim ./2024-07-15-14-mysql-all.sql
查看第24行:
CHANGE MASTER TO MASTER_LOG_FILE='localhost-bin.000002', MASTER_LOG_POS=157;
刚刚备份的是之前开始的数据,我们现在模拟真实的生产环境,在备份后,又产生了新的数据
master1
mysql -uroot -p'Lixinyi@123'
insert into master1db.master1tab values (33333333);
insert into master1db.master1tab values (44444);
从(master2)
测试rep用户是否可用
master2
部署数据库应用
mysql -h master1 -urep -p'Lixinyi@123'
用授权的账号登陆
启动服务器序号
[root@localhost ~]#vim /etc/my.cnf
不用在从设备上开启二进制日志,没有人向master2请求日志。
server-id=2
服务器ID是必须设置的。
[root@localhost ~]# systemctl restart mysqld
mysql -uroot -p'Lixinyi@123'
测试服务器是否修改正确。能否正常登陆。
手动同步数据
mysql> set sql_log_bin=0;
mysql> source /tmp/2024-07-15-03-mysql-all.sql
注释:
set sql_log_bin=0; 设置当前数据库服务器的二进制日志临时关闭
source /tmp/2024-07-15-14-mysql-all.sql 根据日志文件还原数据库
验证是否正确完成备份:
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | master1db | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec) mysql> select * from master1db.master1tab; +------+ | name | +------+ | 1111 | | 2222 | +------+
设置主服务器
配置主从关系
mysql> change master to
master_host='192.168.145.142',
master_user='rep',
master_password='Lixinyi@123',
master_log_file='localhost-bin.000002',
master_port=3306,
master_log_pos=157;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'master to master_host='master1',master_user='rep',master_password='Lixinyi@123' at line 1
原因:
在MySQL 8.0中,CHANGE MASTER TO
语句用于配置复制。但是,从MySQL 8.0.14开始,该语句已经被弃用,并建议使用新的语句 CHANGE REPLICATION SOURCE TO
CHANGE REPLICATION SOURCE TO
SOURCE_HOST = '192.168.145.142',
SOURCE_USER = 'rep',
SOURCE_PASSWORD = 'Lixinyi@123',
SOURCE_PORT = 3306,
SOURCE_LOG_FILE = 'localhost-bin.000002',
SOURCE_LOG_POS = 158;
change replication source to
source_host = '192.168.145.142',
source_user = 'rep',
source_password = 'Lixinyi@123',
source_port = 3306,
source_log_file = 'localhost-bin.000002',
source_log_pos = 158;
mysql> change replication source to source_host = '192.168.145.142',source_user = 'rep',source_password = 'Lixinyi@123',source_port = 3306,source_log_file = 'localhost-bin.000002',source_log_pos = 158;
注意,二进制日志的位置,应该参照主服务器备份时生成的新位置。
启动从服务器的复制线程
mysql> start slave;
查看启动状态(IO-YES/SQL-YES)
show slave status\G;
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: master1
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: localhost-bin.000003
Read_Master_Log_Pos: 154
Relay_Log_File: localhost-relay-bin.000003
Relay_Log_Pos: 375
Relay_Master_Log_File: localhost-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
从服务器查看数据库,看数据是否一致
mysql> select * from master1db.master1tab;
+----------+
| name |
+----------+
| 1111 |
| 2222 |
| 33333333 |
| 44444 |
+----------+
3333,4444就是主从集群同步过来的数据
返回主服务器(master1)更新数据,在从服务器(master2)观察是否同步。
master1主服务器添加数据
mysql> insert into master1db.master1tab values (55555);
从master2查看数据:
mysql> select * from master1db.master1tab;
+----------+
| name |
+----------+
| 1111 |
| 2222 |
| 33333333 |
| 44444 |
| 55555 |
+----------+
已经同步了
注意:
如果从服务器添加了数据,主服务器是不会同步的
不要这样操作,不要操作
因为主从复制的原理,就是从服务器来同步主服务器,如果从服务器擅自添加数据,添加的数据就属于脏数据
了解,不要去实验操作!!!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。