基础环境

iphostname
192.168.30.201mc1
192.168.30.202mc2
192.168.30.203mc3
192.168.30.204mc4
内存 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

如果遇到GPG报错,禁用掉就好

yum --enablerepo=mysql80-community install -y mysql-community-server --nogpgcheck

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
修改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.多主多从模式,(此模式基于上边一主多重模式搭建,虚拟机搭建可创建快照方便回退)

mc1mc3,mc2
mc2mc1,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

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐