centos7 mysql 基本测试(7)主从并行简单测试

centos7 mysql 基本测试(7)主从并行简单测试

参考

MySQL 数据库同步之主从复制实践及故障处理
https://blog.51cto.com/phpervip/11244092
MySQL实战 主从同步(原理+实战)
https://developer.aliyun.com/article/1048072

《MySQL高级篇》十六、主从复制
https://blog.csdn.net/LXYDSF/article/details/133461269

重启MySQL服务使配置生效。

注意:并行复制需要slave的硬件资源充足,并且确保网络通信和IO性能不是瓶颈。不是所有的应用场景都适合并行复制,比如写密集型应用或者slave负载已经很高的情况下,开启并行复制可能会导致性能下降。

MySQL 5.6及以上版本支持并行复制。在配置slave时,可以通过设置slave_parallel_workers参数来指定并行复制的线程数。

以下是一个配置并行复制的例子:

在MySQL的slave配置文件中(my.cnf或者my.ini),添加或修改以下配置项:

[mysqld]
# 设置并行复制的工作线程数,默认为0,表示不并行
slave_parallel_workers = 4
# 设置SQL线程每个工作线程的执行的字节数上限,防止由于大事务占用过多I/O资源
slave_parallel_type = LOGICAL_CLOCK
slave_parallel_workers = 4

在MySQL命令行中设置:

SET GLOBAL slave_parallel_workers = 4;
SET GLOBAL slave_parallel_type = 'LOGICAL_CLOCK';

111

mysql 主从 并行 slave_parallel_workers
slave_parallel_workers是MySQL中的一个配置参数,用于指定并行复制时的工作线程数量。当启用了并行复制(即基于行的复制)时,MySQL会尝试并行应用日志事件,以减少复制延迟。

要配置并行复制,请按照以下步骤操作:

确保你的MySQL版本支持并行复制。

在my.cnf(或my.ini)配置文件中设置slave_parallel_workers参数。

重启MySQL服务以使更改生效。

例如,要设置并行工作线程数为4,你可以在my.cnf中添加以下行:

[mysqld]
slave_parallel_workers = 4

然后,你可以通过运行以下SQL命令来查看更改是否生效:


SHOW VARIABLES LIKE 'slave_parallel_workers';

请注意,并行复制可能会带来数据一致性方面的挑战,因此在配置并行复制前应当充分测试和了解你的数据库环境。

222

Mysql主从复制之skip-slave-start,slave-parallel-type,slave-parallel-workers参数详解和测试
https://blog.csdn.net/liys0811/article/details/132827438

参数1)skip-slave-start = 0
参数详解:禁用skip-slave-start,slave进程会随着mysql启动而启动。skip-slave-start=1为开启
测试:当前slave的查不到该参数,且/etc/my.cnf也没有配置该文件,重启服务后,发现slave进程自动启动,且停服务期间master插入的数据也复制过来了,看了这个参数默认是skip-slave-start = 0

参数2)slave-parallel-type = LOGICAL_CLOCK
slave-parallel-workers = 16
参数详解:mysql在5.7中加入了slave_parallel_type,默认值是database,需要改成基于时钟逻辑的LOGICAL_CLOCK。slave_parallel_workers数,默认为0,按需修改,可以根据服务器的配置来开启相应的并行度。将slave_parallel_type设置为’LOGICAL_CLOCK’,slave_parallel_workers设置为大于0的值,即算是开启了并行复制

当前使用的是默认值:
[root@localhost:mytest1]>show variables like ‘%slave_parallel%’;

我们在/etc/my.cnf写入这个参数slave-parallel-type = LOGICAL_CLOCK,slave-parallel-workers = 16然后重启服务,发现已经有16个复制线程了
注意将这个database修改为logical_clock,在此之前,需要先关闭sql_thread
stop slave sql_thread;
set global slave_parallel_type=‘LOGICAL_CLOCK’;
start slave sql_thread;

1

> slave_parallel_workers=20
> slave_parallel_type = LOGICAL_CLOCK
> slave_pending_jobs_size_max=1G
> sync_binlog=1
> max_allowed_packet = 256M

遇到问题

Coordinator stopped because there were error(s) in the worker(s). 
The most recent failure being: Worker 1 failed executing transaction 'ANONYMOUS' at master log mysql-bin.000001, end_log_pos 403. 
See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.

2


mysql> show variables like 'slave_parallel_workers';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| slave_parallel_workers | 0     |
+------------------------+-------+
1 row in set (0.00 sec)

show variables like 'slave_parallel_type';

+---------------------+----------+
| Variable_name       | Value    |
+---------------------+----------+
| slave_parallel_type | DATABASE |
+---------------------+----------+
1 row in set (0.01 sec)


show processlist \G;
 stop slave ;
SET GLOBAL slave_parallel_workers = 4;
SET GLOBAL slave_parallel_type = 'LOGICAL_CLOCK';
reset slave ;
start slave ;
SHOW VARIABLES LIKE 'slave_parallel_workers';
SHOW VARIABLES LIKE 'slave_parallel_type';
show slave status\G
SHOW VARIABLES LIKE 'slave_parallel_workers';

change master to
master_host='192.168.99.40',
master_user='mysqlsyn',
master_password='1234aA~1',
master_log_file='mysql-bin.000007',
master_log_pos=154;


master 上面的配置
drop database 自己测试加的数据库;

show master status;

mysql -u root -p
1234aA~1

1

解决Worker 1 failed executing transaction ‘ANONYMOUS‘ at master log mall-mysql-bin.000001, end_log_pos
https://blog.csdn.net/MovemOemVeovE/article/details/126022008

正确的流程

 stop slave ;
 SET GLOBAL slave_parallel_workers = 4;
 SET GLOBAL slave_parallel_type = 'LOGICAL_CLOCK';
 change master to
master_host='192.168.99.40',
master_user='mysqlsyn',
master_password='1234aA~1',
master_log_file='mysql-bin.000007',
master_log_pos=154;
start slave ;

start slave ; 之前 必须有
change master to
要 根据
show master status;
查看参数 设置内容

change master to 的内容 可以通过 下面的命令 查看

select * from mysql.slave_master_info \G

mysql5.6.1引入该参数,限制重连次数以及更新show slave status输出的Master_Retry_Count列。默认值是24 * 3600 = 86400。MASTER_RETRY_COUNT主要用于替代mysqld服务器参数 --master-retry-count(该参数在mysql5.6.1及其后续版本废除)。MASTER_RETRY_COUNT = 0表示重连次数无限制。

MASTER_HEARTBEAT_PERIOD:

设置复制心跳的周期,取值范围为0 到 4294967秒。精确度可以达到毫秒,最小的非0值是0.001秒。心跳信息由master在主机binlog日志文件在设定的间隔时间内没有收到新的事件时发出,以便slave知道master是否正常。

slave连接到master后,该参数可通过mysql.slave_master_info表查看。

select * from performance_schema.replication_applier_status_by_worker;

添加数据测试一下

测试主从是否可以

主机端
mysql -u root -p
1234aA~1

show databases ;
use company_pro;
show tables ;
insert into employee(name) value (‘从机测试’);
insert into employee(name) value (‘从机测试726’);
从机端 查看
mysql -u root -p
1234aA~1
show databases ;
use company_pro;
show tables ;
select * from employee ;

可以了

重启就失效的原因

mysql主从配置重启就失效怎么解决
https://www.yisu.com/ask/60205850.html
若MySQL主从配置在重启后失效,可能是由于以下几个原因导致的:

配置文件错误:检查主从配置文件是否正确,包括主从的IP地址、端口号、数据库名等。
MySQL服务未正常关闭:在重启之前,请确保MySQL服务已经正常关闭,可以通过以下命令检查MySQL服务的运行状态:
systemctl status mysql
若MySQL服务未正常关闭,可以尝试强制关闭MySQL服务:
systemctl stop mysql
MySQL数据文件错误:重启后,可能会导致MySQL数据文件损坏,从而导致主从配置失效。可以尝试修复MySQL数据文件,具体方法如下:
备份数据库数据文件。
执行MySQL数据文件检查和修复命令:
mysqlcheck --all-databases -r
主从同步延迟:在重启后,可能需要一段时间才能完成主从同步,所以在重启后,可能会出现主从同步延迟的情况。可以通过以下命令查看主从同步状态:
show slave status;
若主从同步状态显示为"Waiting for master to send event",则表示正在等待主服务器发送事件。
如果以上方法仍然不能解决问题,可以尝试重新配置主从复制。详细步骤如下:

在主服务器上执行以下命令,获取主服务器状态的信息:
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
记下"File"和"Position"的值,这些信息将用于配置从服务器。
在从服务器上执行以下命令,停止当前的从服务器复制:
STOP SLAVE;
在从服务器上执行以下命令,配置从服务器复制:
CHANGE MASTER TO MASTER_HOST=‘主服务器IP地址’,
MASTER_USER=‘主服务器复制用户名’,
MASTER_PASSWORD=‘主服务器复制密码’,
MASTER_LOG_FILE=‘主服务器File的值’,
MASTER_LOG_POS=主服务器Position的值;

在从服务器上执行以下命令,启动从服务器复制:
START SLAVE;
检查主从同步状态,确保主从同步已经正常工作:
SHOW SLAVE STATUS;
若"Slave_IO_Running"和"Slave_SQL_Running"的值均为"YES",则表示主从同步已经正常工作。
希望以上方法能帮助你解决问题。如果问题仍然存在,请提供更多详细信息以便进一步帮助。

slave_parallel_type=logical_clock
slave_parallel_workers=4

sudo systemctl restart mysqld

确保重启还能 继续 是并行的

my.cnf
cat /etc/my.cnf

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#datadir=/var/lib/mysql
datadir=/opt/datadir/mysql/
socket=/opt/datadir/mysql/mysql.sock
#socket=/var/lib/mysql/mysql.sock
# for zhu and chong
server-id=172
log-bin=mysql-bin
# for parallel
slave_parallel_type=logical_clock
slave_parallel_workers=4

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/opt/datadir/mysql/mysql.sock

11

在这里插入图片描述

有旧数据 怎么办?

主从建立成功后,如果没有指定只复制某个数据库或不复制某些数据库,主机上所有新创建的数据库从库都会同步复制。
如果主库已有数据,建立主从关系之后,旧数据不会同步到从库,笔者没有发现好的解决方案,网上常见的方案是把旧数据dump下来,建立主从后,将旧数据删掉重新建库导入旧数据。这样旧数据就以新库新数据的方式重建可以参与主从复制。

MySQL主从同步——主库已有的数据如何到从库
https://blog.csdn.net/m0_57126939/article/details/131088000

MySQL 主从结构中,将备库作为历史库来存储历史数据
https://blog.csdn.net/u011197085/article/details/130289610

如何 切换

如果出现了错误,主从 如何切换

https://deepinout.com/python/python-qa/127_tk_1704152332.html

暂停顺序

Mysql主备架构启停顺序

停用主备架构
一. 关闭应用程序,保证Mysql当前无数据写入
二. 关闭MySQL从库
a.先查看当前的主从同步状态show slave status\G;看是否双yes

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

    b.执行stop slave

    c.停止从库服务mysqladmin shutdown -u用户名 -p密码

    d.查看是否还有mysql的进程ps -ef | grep mysql

三. 关闭MySQL主库
a.停止主库服务mysqladmin shutdown -u用户名 -p密码

    b.查看是否还有mysql的进程ps -ef | grep mysql

启用主备架构
一. 启动MySQL主库
  a.启动主库服务mysqladmin start -u用户名 -p密码

b.查看mysql的进程ps -ef | grep mysql

二. 启动MySQL从库
  a.启动从库服务mysqladmin start -u用户名 -p密码

b.启动复制start slave;

c.检查同步状态show slave status\G;是否双yes

d.查看mysql的进程ps -ef | grep mysql

三. 启动应用

https://blog.csdn.net/capricorn_don/article/details/137282578

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值