mysql一主一从,一主多从环境搭建及主从切换
1、安装mysql环境
1.1、到指定目录下下载安装包,下载mysql8(版本自己去官网选择)
cd /usr/local/src
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
1.2、解压mysql8, 通过xz命令解压出tar包
xz -d mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
tar xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar
1.3、将/usr/local/src下的mysql-8.0.20-linux-glibc2.12-x86_64文件夹内容移动到/usr/local/mysql下
mkdir /usr/local/mysql
mv /usr/local/src/mysql-8.0.20-linux-glibc2.12-x86_64/* /usr/local/mysql
cd /usr/local/mysql
1.4、创建用户组及用户和密码,授权用户
groupadd mysql
useradd -g mysql mysql
chown -R mysql.mysql /usr/local/mysql
1.5、编辑my.cnf文件
vim /etc/my.cnf
按 i 进入修改模式 然后将下面的文本复制进去(原本的注释掉)
[mysqld]
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
port=3306
pid-file = /usr/local/mysql/data/mysql.pid
socket = /tmp/mysql.sock
user = mysql
max_connections=200
max_connect_errors=10
character-set-server=utf8
default-storage-engine=INNODB
default_authentication_plugin=mysql_native_password
lower_case_table_names=1
group_concat_max_len=102400
[mysql]
default-character-set=utf8
[client]
port=3306
default-character-set=utf8
1.6、初始化基础信息,最后一行后面会有个随机的初始密码保存,登录使用
cd bin
./mysqld --initialize
1.7、添加mysqld服务到系统,授权以及添加服务
cd ..
cp -a ./support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
chkconfig --add mysql
启动mysql
service mysql start
service mysql status
1.8、将mysql添加到命令服务
ln -s /usr/local/mysql/bin/mysql /usr/bin
1.9、登录mysql,修改密码
mysql -uroot -p
输入1.6刚刚初始化时生成的密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'info1234';
flush privileges;
1.10、更改root连接权限,开放端口
use mysql;
update user set host='%' where user = 'root';
flush privileges;
#退出
exit;
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload
至此可以通过连接工具登录root账户进行远程连接
2、配置mysql主从
IP Address | 角色 | 必选 | 服务部署 |
---|---|---|---|
192.30.80.153 | Primary | 是 | Mysql8.0.20 |
192.30.80.154 | Standby 1 | 是 | Mysql8.0.20 |
2.1、检查数据库远程访问权限
在192.30.80.153主机上测试连接192.30.80.154 ,
mysql -uroot -h192.30.80.154 -P3306 -p
2.2、主节点配置
修改vim /etc/my.cnf,配置在[mysqld]中
#replication config
server-id = 1
log-bin = mysql-bin #开启二进制日志
gtid-mode = on #开启gtid模式
enforce-gtid-consistency = on #强制gtid一致性,开启后对特定的create table不被支持
binlog-format = row #默认为mixed混合模式,更改成row复制,为了数据一致性
重启mysql服务
service mysql restart
2.3、从节点配置
修改vim /etc/my.cnf,配置在[mysqld]中
server-id = 2
log-bin = mysql-bin
binlog-format = row
gtid-mode = on
enforce-gtid-consistency = on
重启mysql服务
service mysql restart
2.4、主库创建同步用户
# 创建一个用户 并指定可以从本机外部进行访问
CREATE USER 'master'@'192.30.80.154' IDENTIFIED BY 'info1234';
# 设置slave远程从机账户拥有一个可以复制的权限
grant replication slave,replication client on *.* to 'master'@'192.30.80.154';
2.5、查看日志和宿主机master的状态
# 查看log_bin日志是否属于开启状态
show variables like 'log_bin';
# 查看当前操作的宿主机是否为master状态
show master status;
2.6、从库配置主从关系
set global read_only=ON;
set global super_read_only=ON;
# 首先要关掉slave
stop slave;
# master_host为master的ip
# master_password 为授权时设置的密码
CHANGE MASTER TO
master_host = '192.30.80.153',
master_port = 3306,
master_user = 'master',
master_password = 'info1234',
master_auto_position=1;
# 执行完后开启slave
start slave;
2.7、查看同步状态
show slave status \G
Slave_IO_Running,Slave_SQL_Running状态为YES,Seconds_Behind_Master为0,主从配置完成
3、配置mysql主从切换
3.1、主库备库设置只读
set global read_only=ON;
set global super_read_only=ON;
3.2、查看备库复制进程状态
show slave status\G
Slave_IO_Running,Slave_SQL_Running状态为YES,Seconds_Behind_Master为0
3.3、比对主备两边的GTID是否一致
select @@global.gtid_executed;
不一致可以通过GTID_SUBSET函数进行比对
SELECT GTID_SUBSET(master_gtid_executed, slave_gtid_executed);
结果为1,代表主库GTID已经在从库完成执行过,两边是一致的
3.4、从库停掉复制进程并清空主从信息,并取消只读,创建同步用户
stop slave;
reset slave all;
set global read_only=OFF;
set global super_read_only=OFF;
# 创建一个从机用户 并指定可以从本机外部进行访问
CREATE USER 'slave1'@'192.30.80.153' IDENTIFIED BY 'info1234';
# 设置slave远程从机账户拥有一个可以复制的权限
grant replication slave,replication client on *.* to 'slave1'@'192.30.80.153';
3.5、在原主库上配置主从关系
# 首先要关掉slave
stop slave;
# master_host为'slave1'的ip
# master_password 为授权时设置的密码
CHANGE MASTER TO
master_host = '192.30.80.154',
master_port = 3306,
master_user = 'slave1',
master_password = 'info1234',
master_auto_position=1;
# 执行完后开启slave
start slave;
3.6、查看同步状态
show slave status \G
Slave_IO_Running,Slave_SQL_Running状态为YES,Seconds_Behind_Master为0,主从切换完成
4、一主多从配置和切换
与一主一从顺序不变,在以下几处配置中增加一个从节点
4.1、从节点配置
修改vim /etc/my.cnf,配置在[mysqld]中,从节点2上
server-id = 3
log-bin = mysql-bin
binlog-format = row
gtid-mode = on
enforce-gtid-consistency = on
4.2、主库创建同步用户时,增加一个ip
CREATE USER 'master'@'192.30.80.155' IDENTIFIED BY 'info1234';
grant replication slave,replication client on *.* to 'master'@'192.30.80.155';
4.3、从库配置主从关系,从库2上
set global read_only=ON;
set global super_read_only=ON;
# 首先要关掉slave
stop slave;
# master_host为master的ip
# master_password 为授权时设置的密码
CHANGE MASTER TO
master_host = '192.30.80.153',
master_port = 3306,
master_user = 'master',
master_password = 'info1234',
master_auto_position=1;
# 执行完后开启slave
start slave;
show slave status \G
至此一主多从配置完成
一主多从切换,增加创建用户,然后停止slave后重新建立主从关系,再次启动即可。