mysql配置管理
延迟复制
进入slave端的mysql
mysql> stop slave;
mysql> CHANGE MASTER TO MASTER_DELAY = 30;
mysql> start slave;
查看slave状态
mysql> show slave status\G;
主从复制已经打开
可以看到已经设置延迟复制
当有数据需要复制时候,会等待30再复制
并行复制(MTS)
修改mysql的配置参数
重启mysql
此时查看进程
mysql> show processlist;
慢查询
首先查询一下慢查询的变量值
mysql> show variables like 'slow%';
将慢查询打开
set global slow_query_log=1;
查询一下多少秒会加入慢查询日志
mysql> show variables like 'long%';
需要十秒
此时模拟实验
mysql> select sleep(10); #睡眠十秒
去查看满查询日志,可以看到这个日志
cat /data/mysql/server2-slow.log
mysql组复制
主从复制原理图
组复制原理图
All servers are set to read-write mode when joining the group.
在这个mysql所有节点都进行如下设置:
首先先把mysql关闭
/etc/init.d/mysqld stop
清空数据存储目录
rm -fr /data/mysql/
编辑配置文件
vim /etc/my.cnf
[mysqld]
server_id=1 ###根据节点修改
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW
plugin_load_add='group_replication.so'
transaction_write_set_extraction=XXHASH64
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address= "server1:33061" #根据节点修改,必须写主机名,然后设置解析
group_replication_group_seeds= "server1:33061,server2:33061,server3:33061" #根据节点修改,必须写主机名,然后设置解析
group_replication_bootstrap_group=off
group_replication_ip_whitelist="172.25.21.0/24,127.0.0.1/8"
group_replication_single_primary_mode=OFF
group_replication_enforce_update_everywhere_checks=ON
进行无密码的数据库初始化,并且指定用户为mysql
mysqld --initialize-insecure --user=mysql
打开数据库
/etc/init.d/mysqld start
进入数据库
mysql
查看插件是否已经开启
mysql> SHOW PLUGINS;
mysql> SET SQL_LOG_BIN=0;
mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'westos';
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
mysql> FLUSH PRIVILEGES;
mysql> SET SQL_LOG_BIN=1;
mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='westos' FOR CHANNEL 'group_replication_recovery';
mysql> SET GLOBAL group_replication_bootstrap_group=ON; ##这条命令只需要在一个引导节点输入就行,后面的节点不需要执行,否则各自开启一个新的集群
mysql> START GROUP_REPLICATION;
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;##这条命令只需要在一个引导节点输入就行,后面的节点不需要执行,否则各自开启一个新的集群
当三台主机都配置完成后,查看集群
SELECT * FROM performance_schema.replication_group_members;
测试一下:
在随意一台主机写入数据:
mysql> CREATE DATABASE test;
mysql> USE test;
mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 TEXT NOT NULL);
mysql> INSERT INTO t1 VALUES (1, 'Luis');
在其他主机查看:
SELECT * FROM test.t1;
MySQL路由器配置
开一个新的虚拟机
安装:
rpm -ivh mysql-router-community-8.0.21-1.el7.x86_64.rpm
配置:
vim /etc/mysqlrouter/mysqlrouter.conf
[routing:ro]
bind_address = 0.0.0.0
bind_port = 7001
destinations = 172.25.21.1:3306,172.25.21.2:3306,172.25.21.3:3306
routing_strategy = round-robin
[routing:rw]
bind_address = 0.0.0.0
bind_port = 7002
destinations = 172.25.21.1:3306,172.25.21.2:3306,172.25.21.3:3306
routing_strategy = first-available
在数据库创建一个远程连接的用户,由于做了组复制,在一个主机创建,其他主机会自动复制
mysql> grant all on test.* to pwc@'%' identified by '808bass';
在另外一台主机测试
[root@foundation21 mysql]# mysql -h 172.25.21.4 -P 7001 -upwc -p808bass
由于访问的是7001 我们设置的是RR轮寻
可以看到第一次在server1上
退出后,再次进入
[root@foundation21 mysql]# mysql -h 172.25.21.4 -P 7001 -upwc -p808bass
第二次在server2上
如果访问7002端口,我们设置的是routing_strategy = first-available
一旦选择了一个主机后,除非这个主机down掉,否则不会更换主机