MYSQL数据库(三)
MySQL集群
主从复制相关
主从复制相关线程
主节点:
dump Thread:为每个Slave的I/O Thread启动一个dump线程,用于向其发送binary log events从节点:
I/O Thread:向Master请求二进制日志事件,并保存于中继日志中
SQL Thread:从中继日志中读取日志事件,在本地完成重放
跟复制功能相关的文件:
master.info:用于保存slave连接至master时的相关信息,例如账号、密码、服务器地址等
relay-log.info:保存在当前slave节点上已经复制的当前二进制日志和本地relay log日志的对应关系
mysql-relay-bin.00000#: 中继日志,保存从主节点复制过来的二进制日志,本质就是二进制日志
主从复制特点
异步复制: 客户端性能良好
主从数据不一致比较常见
复制需要考虑二进制日志事件记录格式
STATEMENT(5.0之前), Mariadb5.5 默认使用此格式
ROW(5.1之后,推荐),MySQL 8.0 默认使用此格式
MIXED: Mariadb10.3 默认使用此格式
主从复制实现过程
主节点配置:
(1) 启用二进制日志
[mysqld]
log_bin
(2) 为当前节点设置一个全局惟一的ID号
[mysqld]
server-id=#
log-basename=master #可选项,设置datadir中日志名称,确保不依赖主机名
server-id的取值范围
1 to 4294967295 (>= MariaDB 10.2.2),默认值为1
0 to 4294967295 (<= MariaDB 10.2.1),默认值为0,如果从节点为0,所有master都将拒绝此slave的连接
(3) 查看从二进制日志的文件和位置开始进行复制
SHOW MASTER STATUS;
(4) 创建有复制权限的用户账号
GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'HOST' IDENTIFIED BY 'replpass';
#MySQL8.0 分成两步实现
mysql> create user repluser@'10.0.0.%' identified by '123456';
mysql> grant replication slave on *.* to repluser@'10.0.0.%';
从节点配置:
(1) 启动中继日志
[mysqld]
server_id=# #为当前节点设置一个全局惟的ID号
log-bin
read_only=ON #设置数据库只读,针对supper user无效
relay_log=relay-log #relay log的文件路径,默认值hostname-relay-bin
relay_log_index=relay-log.index #默认值hostname-relay-bin.index
(2) 使用有复制权限的用户账号连接至主服务器,并启动复制线程
CHANGE MASTER TO MASTER_HOST='masterhost',
MASTER_USER='repluser',
MASTER_PASSWORD='replpass',
MASTER_LOG_FILE='mariadb-bin.xxxxxx',
MASTER_LOG_POS=#;
START SLAVE [IO_THREAD|SQL_THREAD];
SHOW SLAVE STATUS;
主从复制相关和建议
1.限制从服务器为只读
read_only=ON
#注意:此限制对拥有SUPER权限的用户均无效
注意:以下命令会阻止所有用户, 包括主服务器复制的更新
FLUSH TABLES WITH READ LOCK;
2.在从节点清除信息
注意:以下都需要先 STOP SLAVE
RESET SLAVE #从服务器清除master.info ,relay-log.info, relay log ,开始新的relay log
RESET SLAVE ALL #清除所有从服务器上设置的主服务器同步信息,如HOST,PORT, USER和 PASSWORD等
3.复制错误解决方法
可以在从服务器忽略几个主服务器的复制事件,此为global变量,或指定跳过事件的ID
注意: Centos 8.1以上版本上的MariaDB10.3主从节点同时建同名的库和表不会冲突,建主键记录会产生冲突
#系统变量,指定跳过复制事件的个数
SET GLOBAL sql_slave_skip_counter = N
#服务器选项,只读系统变量,指定跳过事件的ID
[mysqld]
slave_skip_errors=1007|ALL
4.复制冲突的解决
#方法1
MariaDB [(none)]> stop slave;
MariaDB [(none)]> set global sql_slave_skip_counter=1;
MariaDB [(none)]> start slave;
#方法2
show slave status\G #查看错误编码
[root@slave1 ~]#vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
slave_skip_errors=1007|ALL #跳过错误
[root@slave1 ~]#systemctl restart mariadb
START SLAVE 语句,指定执到特定的点
START SLAVE [thread_types]
START SLAVE [SQL_THREAD] UNTIL MASTER_LOG_FILE = 'log_name', MASTER_LOG_POS =log_pos
START SLAVE [SQL_THREAD] UNTIL RELAY_LOG_FILE = 'log_name', RELAY_LOG_POS =log_pos
thread_types:
[thread_type [, thread_type] ... ]
thread_type: IO_THREAD | SQL_THREAD
5.保证主从复制的事务安全
在master节点启用参数:
sync_binlog=1 #每次写后立即同步二进制日志到磁盘,性能差
#如果用到的为InnoDB存储引擎:
innodb_flush_log_at_trx_commit=1 #每次事务提交立即同步日志写磁盘
sync_master_info=# #次事件后master.info同步到磁盘
在slave节点启用服务器选项:
skip-slave-start=ON #不自动启动slave
在slave节点启用参数:
sync_relay_log=# #次写后同步relay log到磁盘
sync_relay_log_info=# #次事务后同步relay-log.info到磁盘
实现主从复制
主服务:
1.修改主服务器配置文件,添加
[mysqld]
server-id=18
log-bin
[root@localhost ~]# systemctl restart mysqld.service
2.查看二进制文件位置
mysql> show master logs;
+----------------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+----------------------+-----------+-----------+
| localhost-bin.000001 | 156 | No |
+----------------------+-----------+-----------+
1 row in set (0.00 sec
3.创建用于复制的用户
mysql> create user rep@'10.0.0.%' identified by '123456';
Query OK, 0 rows affected (0.01 sec)
mysql> grant replication slave on *.* to rep@'10.0.0.%';
Query OK, 0 rows affected (0.00 sec)
从服务器
1.修改配置文件
[mysqld]
server-id=28
read-only
[root@localhost ~]# systemctl restart mysqld.service
2.临时关闭二进制日志,并
mysql> set sql_log_bin=0;
mysql> change master to master_host='10.0.0.18',master_user='rep',master_password='123456',master_port=3306,master_log_file='ocalhost-bin.000002',master_log_pos=156;
mysql> start slave;
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: 10.0.0.18
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: localhost-bin.000002
Read_Master_Log_Pos: 975
Relay_Log_File: localhost-relay-bin.000002
Relay_Log_Pos: 1147
Relay_Master_Log_File: localhost-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
#如果master服务器已经运行一段时间了,建议先将数据库备份,将数据还原到slave服务器,减轻同步时的压力,此方法也可用于新增slave服务器
[root@localhost data]# mysqldump -A -F --master-data=1 --single-transaction >all.sql
#修改备份文件,导入数据后不用再手动指定master服务器
[root@localhost data]# vim all.sql
CHANGE MASTER TO MASTER_HOST='10.0.0.18',MASTER_USER='rep',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_LOG_FILE='localhost-bin.000002',MASTER_LOG_POS=156;
#建议优化主和从节点服务器的性能
mysql> set global innodb_flush_log_at_trx_commit=2;
mysql> set global sync_binlog=0;
master宕机提升一个slave为master
1.查看slave状态,找到数据同步较快的从服务器
mysql> set global read_only=off;
Query OK, 0 rows affected (0.00 sec)
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> reset slave all;
Query OK, 0 rows affected, 1 warning (0.11 sec)
mysql> show master logs;
+---------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000004 | 156 | No |
| binlog.000005 | 179 | No |
| binlog.000006 | 1295 | No |
+---------------+-----------+-----------+
3 rows in set (0.00 sec)
#上面临时修改,永久方法
[mysqld]
server-id=28
read-only=OFF
log-bin
[root@centos7 ~]# systemctl restart mysqld
2.在其他从服务器上
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> reset slave all;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> change master to master_host='10.0.0.28',master_user='rep',master_password='123456',master_log_file='binlog.000006',master_log_pos=1295;
Query OK, 0 rows affected, 8 warnings (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: 10.0.0.28
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.000006
Read_Master_Log_Pos: 1295
Relay_Log_File: localhost-relay-bin.000002
Relay_Log_Pos: 321
Relay_Master_Log_File: binlog.000006
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
级联复制
主服务器
[root@centos7 ~]# vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server-id=18
log-bin
[root@centos7 ~]# systemctl restart mysqld
创建用于复制的用户
mysql> create user rep@'10.0.0.%' identified by '123456';
Query OK, 0 rows affected (0.01 sec)
mysql> grant replication slave on *.* to rep@'10.0.0.%';
Query OK, 0 rows affected (0.00 sec)
mysql> show master logs;
+----------------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+----------------------+-----------+-----------+
| localhost-bin.000001 | 207 | No |
| localhost-bin.000002 | 998 | No |
| localhost-bin.000003 | 156 | No |
+----------------------+-----------+-----------+
中间服务器
[root@centos7 ~]#vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server-id=18
log-bin
read-only
log_slave_updates #级联复制中间节点的必选项,MySQL8.0此为默认值,可以不要人为添加
[root@centos7 ~]# systemctl restart mysqld
mysql> change master to master_host='10.0.0.18',master_user='rep',master_password='123456',master_port=3306,master_log_file='localhost-bin.000003',master_log_pos=156;
Query OK, 0 rows affected, 9 warnings (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: 10.0.0.18
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: localhost-bin.000003
Read_Master_Log_Pos: 156
Relay_Log_File: localhost-relay-bin.000002
Relay_Log_Pos: 328
Relay_Master_Log_File: localhost-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
mysql> show master logs;
+----------------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+----------------------+-----------+-----------+
| localhost-bin.000001 | 156 | No |
+----------------------+-----------+-----------+
1 row in set (0.00 sec)
后端服务器
[root@centos7 ~]#vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server-id=18
read-only
[root@centos7 ~]# systemctl restart mysqld
mysql> change master to master_host='10.0.0.28',master_user='rep',master_password='123456',master_port=3306,master_log_file='localhost-bin.000001',master_log_pos==156;
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: 10.0.0.28
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: localhost-bin.000001
Read_Master_Log_Pos: 156
Relay_Log_File: localhost-relay-bin.000002
Relay_Log_Pos: 328
Relay_Master_Log_File: localhost-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
双主模式
双主模式,双方互为主从
实现方式:双方服务器各自将对方设置为主服务器,并开启二进制日志和中继日志
容易产生的问题:数据不一致;因此慎用
建议:定义自动增长id字段的数值范围各为奇偶
auto_increment_offset=1|2 #开始点
auto_increment_increment=2 #增长幅度
master1:
[mysqld]
server-id=18
log-bin
auto_increment_offset=1
auto_increment_increment=2
[root@centos7 ~]# systemctl restart mysqld
创建用于复制的用户
#先实现一个方向的主从,从服务器不需要在创建用户
mysql> create user rep@'10.0.0.%' identified by '123456';
Query OK, 0 rows affected (0.01 sec)
mysql> grant replication slave on *.* to rep@'10.0.0.%';
Query OK, 0 rows affected (0.00 sec)
只想从服务器
mysql> change master to master_host='10.0.0.28',master_user='rep',master_password='123456',master_port=3306,master_log_file='localhost-bin.000002',master_log_pos=156;
Query OK, 0 rows affected, 9 warnings (0.01 sec)
查看二进制日志位置
mysql> show master logs;
+----------------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+----------------------+-----------+-----------+
| localhost-bin.000001 | 207 | No |
| localhost-bin.000002 | 998 | No |
| localhost-bin.000003 | 179 | No |
| localhost-bin.000004 | 156 | No |
+----------------------+-----------+-----------+
4 rows in set (0.00 sec)
启动slave服务
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: 10.0.0.28
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: localhost-bin.000002
Read_Master_Log_Pos: 156
Relay_Log_File: localhost-relay-bin.000002
Relay_Log_Pos: 328
Relay_Master_Log_File: localhost-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
master2:
修改配置
[mysqld]
server-id=28
log-bin
auto_increment_offset=2
auto_increment_increment=2
[root@centos7 ~]# systemctl restart mysqld
查看二进制文件位置
mysql> show master logs;
+----------------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+----------------------+-----------+-----------+
| localhost-bin.000001 | 179 | No |
| localhost-bin.000002 | 156 | No |
+----------------------+-----------+-----------+
2 rows in set (0.00 sec)
指向主服务器
mysql> change master to master_host='10.0.0.18',master_user='rep',master_password='123456',master_port=3306,master_log_file='localhost-bin.000004',master_log_pos=156;
启动主从服务
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: 10.0.0.18
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: localhost-bin.000004
Read_Master_Log_Pos: 156
Relay_Log_File: localhost-relay-bin.000002
Relay_Log_Pos: 328
Relay_Master_Log_File: localhost-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
同步,异步,半同步
同步服务
MySQL主服务器把二进制日志发送给从服务器,直到从服务器接受完毕并返回确认信息
特点:保证所有从服务器和主服务器数据一致,效率低
异步复制
MySQL主服务器把二进制日志发送给从服务器,不确认从服务器是否接受完毕接受完毕,MySQL默认
特点:不能保证主从数据完全一致,效率高
半同步复制
MySQL主服务器把二进制日志发送给从服务器,至少收到一个从服务器接受完毕确认信息
特点:确保数据至少有一份完全备份
实现半同步复制
master:
安装插件:必选先安装在修改配置文件
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
[root@localhost data]# cat /etc/my.cnf.d/mysql-server.cnf
[mysqld]
server-id=18
log-bin
rpl_semi_sync_master_enabled=ON
rpl_semi_sync_master_timeout=3000
[root@localhost ~]# systemctl restart mysqld
mysql> show global variables like '%semi%';
+-------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_master_timeout | 3000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_for_slave_count | 1 |
| rpl_semi_sync_master_wait_no_slave | ON |
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
+-------------------------------------------+------------+
6 rows in set (0.00 sec)
mysql> show global status like '%semi%';
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 0 |
| Rpl_semi_sync_master_net_avg_wait_time | 0 |
| Rpl_semi_sync_master_net_wait_time | 0 |
| Rpl_semi_sync_master_net_waits | 0 |
| Rpl_semi_sync_master_no_times | 0 |
| Rpl_semi_sync_master_no_tx | 0 |
| Rpl_semi_sync_master_status | ON |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 0 |
| Rpl_semi_sync_master_tx_wait_time | 0 |
| Rpl_semi_sync_master_tx_waits | 0 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 0 |
+--------------------------------------------+-------+
14 rows in set (0.00 sec)
从服务器
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected, 1 warning (0.00 sec)
[root@localhost data]# cat /etc/my.cnf.d/mysql-server.cnf
[mysqld]
server-id=28
log-bin
rpl_semi_sync_slave_enabled=ON
[root@localhost ~]# systemctl restart mysqld
mysql> change master to master_host='10.0.0.18',master_user='rep',master_password='123456',master_port=3306,master_log_file='localhost-bin.000005',master_log_pos=156;
Query OK, 0 rows affected, 9 warnings (0.11 sec)
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: 10.0.0.18
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: localhost-bin.000005
Read_Master_Log_Pos: 156
Relay_Log_File: localhost-relay-bin.000002
Relay_Log_Pos: 328
Relay_Master_Log_File: localhost-bin.000005
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
mysql> show global status like '%semi%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON |
+----------------------------+-------+
1 row in set (0.00 sec)
#mariadb10上可用下面命令加载模块
plugin-load-add = semisync_master/semisync_slave
复制过滤器
让服务器只复制指定的库或表
两种实现方式:
(1) 服务器选项:主服务器仅向二进制日志中记录与特定数据库相关的事件
缺点:基于二进制还原将无法实现;不建议使用
优点: 只需要在主节点配置一次即可
注意:此项和 binlog_format相关
vim /etc/my.cnf
binlog-do-db=db1 #数据库白名单列表,不支持同时指定多个值,如果想实现多个数据库需多行实现
binlog-do-db=db2
binlog-ignore-db= #数据库黑名单列表
(2) 从服务器SQL_THREAD在relay log中的事件时,仅读取与特定数据库(特定表)相关的事件并应用于本地
缺点:会造成网络及磁盘IO浪费,在所有从节点都要配置
优点: 不影响二进制备份还原
从服务器上的复制过滤器相关变量
replicate_do_db="db1,db2,db3" #指定复制库的白名单,变量可以指定逗号分隔的多个值,选项不支持多值,只能分别写多行实现
replicate_ignore_db= #指定复制库黑名单
replicate_do_table= #指定复制表的白名单
replicate_ignore_table= #指定复制表的黑名单
replicate_wild_do_table= foo%.bar% #支持通配符
replicate_wild_ignore_table=
注意:跨库的更新将无法同步
MySQL代理服务
Mycat实现MySQL读写分离
master服务器:
[mysqld]
server-id=28
log-bin
mysql> create user rep@'10.0.0.%' identified by '123456';
Query OK, 0 rows affected (0.01 sec)
mysql> grant replication slave on *.* to rep@'10.0.0.%';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> create user root@'10.0.0.%' identified by '123456';
Query OK, 0 rows affected (0.01 sec)
mysql> grant all on *.* to root@'10.0.0.%';
Query OK, 0 rows affected (0.00 sec)
mysql> show master logs;
+-------------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+-------------------+-----------+-----------+
| master-bin.000001 | 179 | No |
| master-bin.000002 | 1185 | No |
+-------------------+-----------+-----------+
2 rows in set (0.00 sec
slave服务器:
[mysqld]
server-id=38
mysql> change master to master_host='10.0.0.28',master_user='rep',master_password='123456',master_log_file='master-bin.000002',master_log_pos=1185;
Query OK, 0 rows affected, 8 warnings (0.02 sec)
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: 10.0.0.28
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000002
Read_Master_Log_Pos: 1185
Relay_Log_File: slave-relay-bin.000002
Relay_Log_Pos: 325
Relay_Master_Log_File: master-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
mycat服务器
yum -y install java
wget http://dl.mycat.org.cn/1.6.7.6/20210303094759/Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz
mkdir /apps
tar xvf Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz -C /apps
[root@mycat ~]# vim /apps/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="localhost1" database="hellodb" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="host1" url="10.0.0.28:3306" user="root"
password="123456">
<readHost host="host2" url="10.0.0.38:3306" user="root"
password="123456" />
</writeHost>
</dataHost>
[root@mycat ~]# vim /apps/mycat/conf/server.xml
<property name="serverPort">8066</property>
<property name="managerPort">9066</property>
<property name="idleTimeout">300000</property>
<property name="authTimeout">15000</property>
<property name="bindIp">0.0.0.0</property>
<property name="dataNodeIdleCheckPeriod">300000</property>
<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property>
测试:
[root@master ~]# tail -f /var/lib/mysql/master.log
...
2022-06-30T12:31:39.485856Z 8 Query select user()
2022-06-30T12:31:49.487452Z 8 Query select user()
2022-06-30T12:31:59.489016Z 8 Query select user()
2022-06-30T12:32:09.489389Z 8 Query select user()
2022-06-30T12:32:19.488688Z 8 Query select user()
2022-06-30T12:32:29.485331Z 8 Query select user()
2022-06-30T12:32:39.487071Z 8 Query select user()
2022-06-30T12:32:49.489086Z 8 Query select user()
2022-06-30T12:32:59.488414Z 8 Query select user()
2022-06-30T12:33:09.488277Z 8 Query select user()
2022-06-30T12:33:19.485627Z 8 Query select user()
2022-06-30T12:33:20.152683Z 8 Query insert teachers values(5,'wang',30,'M')
[root@slave ~]# tail -f /var/lib/mysql/slave.log
2022-06-30T12:31:31.455364Z 6 Connect Out rep@10.0.0.28:3306
2022-06-30T12:31:40.092988Z 10 Connect root@10.0.0.18 on hellodb using TCP/IP
2022-06-30T12:31:40.093745Z 10 Query select user()
2022-06-30T12:31:50.036971Z 10 Query select user()
...
2022-06-30T12:34:19.882750Z 11 Query show tables
2022-06-30T12:34:20.035394Z 12 Query select user()
2022-06-30T12:34:30.037258Z 13 Query select user()
2022-06-30T12:34:40.033727Z 10 Query select user()
2022-06-30T12:34:50.038805Z 11 Query select user()
2022-06-30T12:35:00.034499Z 12 Query select user()
2022-06-30T12:35:00.139185Z 13 Query select * from teachers
从主从服务器日志中可以看到,数据写入master服务器,数据从slave服务器读取
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示