MYSQL8.0集群搭建 一主多从
-
- 基础环境
- **1. 下载 mysql rpm包**
- **2.主节点添加主从同步账户**
- **3.开启二进制日志文件和添加server-id**
- 4.登入主节点mysql重置偏移量
- 5.注册从节点
- 6.启动 启动所有从节点的slave
- 7.多主多从模式,(此模式基于上边一主多重模式搭建,虚拟机搭建可创建快照方便回退)
- **8.主节点添加配置**
- 9.多主多从同步
- 10.多主多从测试
- 主从修复
基础环境
ip | hostname |
---|---|
192.168.30.201 | mc1 |
192.168.30.202 | mc2 |
192.168.30.203 | mc3 |
192.168.30.204 | mc4 |
内存 1G | |
Cpu 1C |
1. 下载 mysql rpm包
wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm
也可以通过以下链接下载
链接:https://pan.baidu.com/s/1w_XG7YETYHtAkMK9g5UXIA?pwd=WNYB
提取码:WNYB
#主从节点都要安装启动 yum localinstall mysql80-community-release-el7-5.noarch.rpm yum clean all yum makecache yum install -y mysql-community-server systemctl start mysqld systemctl status mysqld systemctl enable mysqld
修改ROOT密码
#查看root初始化密码grep "password" /var/log/mysqld.log
mysql -uroot -p'取到的初始化密码'
--修改密码策略 set global validate_password.policy=LOW; set global validate_password.mixed_case_count=0; set global validate_password.number_count=0; set global validate_password.special_char_count=0; set global validate_password.length=1; set global validate_password.check_user_name='OFF'; --这里将roo密码修改为 root ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
执行以上语句时如果遇到下方报错:
按照现有的密码规则改下密码就可以操作了,这里的密码是刚刚 grep “password” /var/log/mysqld.log获得的密码随便在后边加个数字
alter user 'root'@'localhost' identified by '1ytEl&8S!5Vq2';
2.主节点添加主从同步账户
mysql -uroot -p‘root’
修改密码策略:
创建用户:
用户名:copy
密码:123456
set global validate_password.policy=LOW; set global validate_password.mixed_case_count=0; set global validate_password.number_count=0; set global validate_password.special_char_count=0; set global validate_password.length=1; set global validate_password.check_user_name='OFF';CREATE USER 'copy'@'%' IDENTIFIED BY '123456'; alter user 'copy'@'%' identified with mysql_native_password by '123456'; grant all privileges on *.* to 'copy'@'%' with grant option;
select host,user from mysql.user;
--查看copy用户权限情况,由于上面命令给的ALL权限所以这里显示结果比较多 show grants for 'copy'@'%';
下面属于 mysql 8.0创建用户的详解 此步骤可略过
–mysql 密码策略详解
--MySQL登录后使用这个命令查看密码策略 show variables like 'validate%';--可以使用以下命令进行修改 --密码验证策略低要求(0或LOW代表低级) set global validate_password.policy=LOW;--密码至少要包含的小写字母个数和大写字母个数 0代表0个 set global validate_password.mixed_case_count=0;--密码至少要包含的数字个数 0代表0个。 set global validate_password.number_count=0; --密码至少要包含的特殊字符数 0代表0个 set global validate_password.special_char_count=0; -- 密码最小长度 set global validate_password.length=1; --跳过用户验证 OFF关闭 ON开启 set global validate_password.check_user_name='OFF';
mysql8.0 用户操作详解
--创建用户 CREATE USER 'user'@'%' IDENTIFIED BY '123456';--修改密码 alter user 'user'@'host' identified by 'pwd';--按mysql_native_password加密方式修改密码 alter user 'user'@'%' identified with mysql_native_password by 'pwd';--修改权限 grant #auth on #databaseName.#table to '#userName'@'#host'; GRANT ALL PRIVILEGES ON *.* TO 'copy'@'%' WITH GRANT OPTION;--例子 :给test账号赋值 所有库表的 增删改查权限 grant all privileges on *.* to 'test'@'%'; --刷新权限 flush privileges; --auth 代表权限,如下 --all privileges 全部权限 --select 查询权限 --select,insert,update,delete 增删改查权限 --select,[…]增…等权限--databaseName 代表数据库名#table 代表具体表,如下 --*.*代表全部表 --A.B 代表具体A库下的B表--userName 代表用户名--host 代表访问权限,如下 --%代表通配所有host地址权限(可远程访问) --localhost为本地权限(不可远程访问) --指定特殊Ip访问权限 如10.138.106.102--查看用户权限 show grants for 'copy'@'%';CREATE USER root@'%' IDENTIFIED BY '123456'; --删除用户 drop user 'root'@'%'; use mysql; select host,user from user;
3.开启二进制日志文件和添加server-id
所有节点
systemctl stop mysqld
vim /etc/my.cnf
主节点/etc/my.cnf添加内容:
log-bin=mysql-bin server-id=xxx
从节点/etc/my.cnf添加内容:
server-id=xxx
注意,注意,注意,只有master节点有mysql-bin配置,每个节点的server-id必须不同
主节点内容:
从节点内容:
systemctl start mysqld
**
4.登入主节点mysql重置偏移量
**
mysql -uroot -proot
--重置偏移量如果不重置,从节点也会创建copy用户 reset master; show master status;
获取到
二进制文件名字 : mysql-bin.000001
Position : 157
这里获取的信息之后会用到
5.注册从节点
登入所有从节点的mysql上执行以下命令:
master_host : 主节点主机名
master_user : 第2步创建的主从同步账户
master_port : 主节点mysql服务的端口号,因为没有这里改过所以是 3306
master_password : 第2步创建的主从同步账户的密码
master_log_file : 第4步获取的二进制文件名字
master_log_pos : 第4步获取的Position值
stop slave; reset slave;change master to master_host='mc1',master_user='copy',master_port=3306,master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=157;
6.启动 启动所有从节点的slave
start slave;
show slave status \G
这两项 为 YES说明搭建成功了:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
测试步骤:
在主节点创建test_mc库去从节点上看是否有被同步;
主节点:
从节点:
主从同步成功
7.多主多从模式,(此模式基于上边一主多重模式搭建,虚拟机搭建可创建快照方便回退)
主 | 从 |
---|---|
mc1 | mc3,mc2 |
mc2 | mc1,mc4 |
8.主节点添加配置
停止所有节点mysql服务
systemctl stop mysqld
由于之前 mc1已经配置 log-bin=mysql-bin ,这里mc2也要变为主节点所以mc2也要配置下
下面配置只在 mc1 和 mc2两个主上配置:
auto_increment_increment=2 auto_increment_offset=1 log-slave-updates sync_binlog=1
auto_increment_increment :
参数为2偶数主键偏移量递增,为1奇数递增
auto_increment_offset:
主键偏移量开始位置
log-slave-updates
从库做为其他从库的主库时 log-slave-updates参数是必须要添加的,因为从库要作为其他从库的主库,必须添加该参数
sync_binlog=1
一次事务更新一回
注意:auto_increment_offse两个主的配置,一个为1 一个为2
MC1配置:
MC2配置:
9.多主多从同步
启动所有节点mysql 服务
systemctl start mysqld
为 mc2创建同步用户
mysql -uroot -p‘root’
修改密码策略:
创建用户:
用户名:copy
密码:123456
set global validate_password.policy=LOW; set global validate_password.mixed_case_count=0; set global validate_password.number_count=0; set global validate_password.special_char_count=0; set global validate_password.length=1; set global validate_password.check_user_name='OFF';CREATE USER 'copy'@'%' IDENTIFIED BY '123456'; alter user 'copy'@'%' identified with mysql_native_password by '123456'; grant all privileges on *.* to 'copy'@'%' with grant option;
select host,user from mysql.user;
如下图权限和远程接受远程访问没有问题
在mc2,mc3上执行
stop slave; reset slave; change master to master_host='mc1',master_user='copy',master_port=3306,master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=157; start slave; show slave status \G
mc2和 mc3截图 从图中可以看出 master_host是mc1
在mc1,mc4上执行
stop slave; reset slave; change master to change master to master_host='mc2',master_user='slave',master_password='Slave_123',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=157; start slave; show slave status \G
从图中可以看出mc1和 mc4的 master_host是mc2
10.多主多从测试
数据同步成功
从数据库开启只读模式,避免和 主节点数据不一致
停止所有 从节点 mysql服务
systemctl stop mysqld vim /etc/my.cnf
添加如下内容:
read_only = 1 super_read_only = 1
启动所有 从节点 mysql服务
systemctl start mysqld show global variables like "%read_only%";
主从修复
解决办法一
注意:适用于mysql主从数据不严谨,数据无需紧密同步情况下使用,耗时短
stop slave; --这里的 1 指定的是 你跳过事务的次数,如果有很多事务没有同步需要设置大一点 set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; start slave;
解决办法二:
注意:重新做主从,数据能够完全同步,耗时长
--主节点 锁表 防止新数据写入 flush tables with read lock; --查看master偏移量 show master status;
#把主机点mysql库导出(因为指定了主机,我直接在父节点获取到了备份sql) #mc2是我主节点主机名称 mysqldump -uroot -p123456 --all-databases > mysql.bak.sql #这里mc1是我的从节点 scp -r mysql.bak.sql mc1:/tmp
--停止从库 stop slave; --关闭只读权限 set global read_only=0; set global super_read_only=0; --导入备份数据 source /tmp/mysql.bak.sql --打开只读权限 set global read_only=1; set global super_read_only=1; --查看只读权限是否打开成功 show variables like '%read_only%';
--重新做主从 记得改master_log_pos,要跟master偏移量一样 change master to master_host='mc2',master_user='copy',master_port=3306,master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1201081; --启动slave start slave; --查看slave状态 show slave status \G
# mysql