怎么样配置mysql主从复制、mysql-5.5异步及半同步
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,下文主要给大家带来怎么样配置mysql主从复制、mysql-5.5异步及半同步,希望这些内容能够带给大家实际用处,这也是我编辑怎么样配置mysql主从复制、mysql-5.5异步及半同步这篇文章的主要
千家信息网最后更新 2024年09月22日怎么样配置mysql主从复制、mysql-5.5异步及半同步
mysql主从异步复制 使用二进制格式安装mysql,并初始化、mtsql服务脚本复制、my.cnf配置文件复制。
导出PATH,方便使用mysql命令# vim /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin
master
1 修改配置文件# vim /etc/my.cnf
[mysqld]datadir = /data/mysql
innodb_file_per_table = 1log-bin=master-binlog-bin-index=master-bin.indexserver-id = 1启动mysql# service mysqld start2 授权slave复制mysql> grant replication slave on *.* to 'replicationuser'@'192.168.8.31' identified by 'replicationuser';
mysql> flush privileges;
mysql> flush tables with read lock; # 锁住table为只读3 查看master二进制日志文件状态,在slave上需要使用mysql> show master status;+-------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+-------------------+----------+--------------+------------------+| master-bin.000001 | 355 | | |+-------------------+----------+--------------+------------------+mysql> show binlog events in "master-bin.000001";
slave1 修改配置文件
# vim /etc/my.cnf[mysqld]
datadir = /data/mysql
innodb_file_per_table = 1relay-log = relay-logrelay-log-index = relay-log.indexserver-id = 10启动mysql# service mysqld start2 配置slave同步设置,并启动slave复制mysql> change master to master_host='192.168.8.30',master_user='replicationuser',master_password='replicationuser',master_log_file='master-bin.000001',master_log_pos=355;
mysql> start salve;3 查看slave的状态mysql> show slave status\GSlave_IO_State: Waiting for master to send event Master_Host: 192.168.8.30 Master_User: replicationuser Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-bin.000001 Read_Master_Log_Pos: 438 Relay_Log_File: relay-log.000004 Relay_Log_Pos: 254 Relay_Master_Log_File: master-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 4384 在master查看slavemysql> show slave hosts;其他设置和说明1 slave上不允许数据库的写操作,因此在slave上设置为用户只读模式,但此设置对具有super权限的用户无效# vim /etc/my.cnf[mysqld]read-only = on
重启mysql,即生效# service mysqld restart重启mysqld,复制线程会自动重启
修改配置后,或者不重启,在数据库中直接修改参数也可以查看只读模式是否生效mysql> show global variables like 'read_only';+---------------+-------+| Variable_name | Value |+---------------+-------+| read_only | ON |+---------------+-------+2 为了保证master bin-log不在缓冲区缓存,立即同步到磁盘上,减少主从复制的延迟时间,在master设定[mysqld] sync-binlog = on重启mysql,即生效# service mysqld restart重启mysqld,复制线程会自动重启
修改配置后,或者不重启,在数据库中直接修改参数也可以查看立即同步模式是否生效
mysql> show global variables like 'sync_binlog';+---------------+-------+| Variable_name | Value |+---------------+-------+| sync_binlog | 0 |+---------------+-------+3 重启mysqld,复制线程会自动重启,存在哪些问题,如何禁止? 当master执行了一些误操作,由于延迟原因,误操作还未同步slave;此时在slave关闭mysql,备份数据恢复到master上,启动slave的mysql,让IO_thread跳过刚才的误操作,再启动复制功能。若slave启动后,主从复制立即开始,还会同步刚才的误操作。 不让其随mysql自动启动,防止同步误操作。
连接master 需要这两个文件master.info,relay-log.info,临时移除。slave无法连接master
在数据文件下
master.info 记录了登陆master和相关信息relay-log.info 记录了relay-log和master-bin的相关信息 4 从云服务器的相关日志会记录在slave的错误日志中。5 若master工作了一定时间,此时做主从的注意事项5.1 master锁表mysql> flush tables with read lock;
5.2 master mysql的数据库导出# mysqldump mydb > mydb.sql5.3 slave 创建同名数据库,并导入数据库# mysqldump mydb < mydb.sql
5.4 此时操作和全新的数据库是相同的,注意master_log_file,master_log_pos即可6 mysql复制过滤在master上# vim /etc/my.cnf[mysqld]binlog-do-db=db1,db2binlog-ignore-db=db1,db2
master binlog-ignore-db带来的问题 不记录部分数据库的二进制日志,二进制日志不完整。当云服务器崩溃时,只能恢复记录了二进制日志的数据,未记录的将不能恢复,因此不建议使用此选项。在slave上可以进行数据库级别的过滤,也可以进行表级别的过滤# vim /etc/my.cnf[mysqld]数据库级别replicate-do-db=replicate-ignore-db=
表级别replicate-do-table=replicate-ignore-table=在表级别使用通配replicate-wild-do-table=mydb.tb% # 仅复制mydb中以tb开头的所有表replicate-wild-ignore-table=mydb.tb_ # 仅复制mydb中以tb开头的、后面跟上一个字符的表slave replicate-ignore-db带来的问题 使用此选项,虽不记录指定slave数据库的二进制日志,但是中继日志是完整的,因此会占有slave的带宽资源。
综上,如果必须对表进行过滤,建议在slave上进行。半同步主从复制1 master 添加模块mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
mysql> set global rpl_semi_sync_master_enabled = 1;
mysql> show variables like 'rpl%';+------------------------------------+-------+| Variable_name | Value |+------------------------------------+-------+| rpl_recovery_rank | 0 || rpl_semi_sync_master_enabled | ON || rpl_semi_sync_master_timeout | 10000 | # 异步复制超时时间,单位ms| rpl_semi_sync_master_trace_level | 32 || rpl_semi_sync_master_wait_no_slave | ON | # 是否必须等待slave上线+------------------------------------+-------+2 slave 添加模块mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
mysql> set global rpl_semi_sync_slave_enabled = 1;
mysql> show variables like 'rpl%';+---------------------------------+-------+| Variable_name | Value |+---------------------------------+-------+| rpl_recovery_rank | 0 || rpl_semi_sync_slave_enabled | ON || rpl_semi_sync_slave_trace_level | 32 |+---------------------------------+-------+3 若此时主从同步是开启的,设置不会立即生效,需重启slave io_thread3.1 master状态查看mysql> show global status like 'rpl%';+--------------------------------------------+-------------+| 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 || Rpl_status | AUTH_MASTER |+--------------------------------------------+-------------+3.2 slave状态查看mysql> show global status like 'rpl%';+----------------------------+-------------+| Variable_name | Value |+----------------------------+-------------+| Rpl_semi_sync_slave_status | OFF || Rpl_status | AUTH_MASTER |+----------------------------+-------------+4 只重启io_thread即可mysql> stop slave io_thread;
mysql> start slave io_thread;
4.1 master状态查看mysql> show global status like 'rpl%';+--------------------------------------------+-------------+| Variable_name | Value |+--------------------------------------------+-------------+| Rpl_semi_sync_master_clients | 1 |+--------------------------------------------+-------------+
4.2 slave状态查看mysql> show global status like 'rpl%';+----------------------------+-------------+| Variable_name | Value |+----------------------------+-------------+| Rpl_semi_sync_slave_status | ON || Rpl_status | AUTH_MASTER |+----------------------------+-------------+5 测试 当半同步超时后(10000ms)一次后,会降级为异步复制。在slave停止io_threadmysql> stop slave io_thread;
在master进行写操作时,会卡住100000ms,之后降级为异步复制,恢复速度;6 为了使参数永久生效,在Master和Slave的my.cnf中编辑: # On Master [mysqld] rpl_semi_sync_master_enabled=1 rpl_semi_sync_master_timeout=1000 # 1 second # On Slave [mysqld] rpl_semi_sync_slave_enabled=1 7 mysql主从机制比较脆弱,若需重启master,需先要停止slave复制,即stop slave。监控和监控主从复制工具percona-toolkit(mattkit-tools)https://www.percona.com/downloads/percona-toolkit/# yum localinstall -y percona-toolkit-2.2.18-1.noarch.rpm --nogpgcheck安装之后会出现一大堆pt命令pt-slave-delay:使slave比master慢一些时间pt-table-checksum:通过单向加密比较主从的数据是否一致rhel使用的是光盘中的rpm库,无法解决percona的依赖yum localinstall时出现如下提示 You could try using --skip-broken to work around the problem You could try running: package-cleanup --problems package-cleanup --dupes rpm -Va --nofiles --nodigestThe program package-cleanup is found in the yum-utils packagemysql ssl 简要说明授权时,增加ssl选项,强制使用ssl;若无此选项,不受限制,即使启用了ssl功能,复制时使用和不使用ssl都可以mysql> grant replication slave on *.* to 'replicationuser'@'192.168.8.31' identified by 'replicationuser' require ssl;
ssl需要的内容mysql> show global variables like '%ssl%';+---------------+----------+| Variable_name | Value |+---------------+----------+| have_openssl | DISABLED || have_ssl | DISABLED || ssl_ca | || ssl_capath | || ssl_cert | || ssl_cipher | || ssl_key | |+---------------+----------+
下文主要给大家带来怎么样配置mysql主从复制、mysql-5.5异步及半同步,希望这些内容能够带给大家实际用处,这也是我编辑怎么样配置mysql主从复制、mysql-5.5异步及半同步这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。
master1 启用二进制日志log-bin = master-binlog-bin-index = master-bin.index2 选择一个唯一的server idserver-id = [0~2^32]3 创建具有复制权限的用户replication slave,复制的从节点replication client,联系master,获取信息的权限slave1 启用二进制日志relay-log = relay-logrelay-log-index = relay-log.index2 选择一个唯一的server id,和主不同server-id = [0~2^32]3 连接至主云服务器复制文件从哪里开始复制?1)master是新的,slave从头开始复制2)master已经运行一段时间,在master执行一次备份,记录二进制日志文件名和事件位置,在slave还原数据,连接至哪一个二进制文件的哪一个位置?mysql> change master to master_host= ,master_port= ,master_log_file= ,master_log_pos= ,master_user= ,master_password= ;mysql> start slave;4 mysql复制线程master会为每一个slave启动1个dump线程master:dumpslave:IO_thread,SQL_thread可单独启动mysql> start slave IO_threadmysql> start slave SQL_thread5 半同步复制时应指定同步超时时间,一旦超时,降级为异步复制mysql主从异步复制 使用二进制格式安装mysql,并初始化、mtsql服务脚本复制、my.cnf配置文件复制。
导出PATH,方便使用mysql命令# vim /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin
master
1 修改配置文件# vim /etc/my.cnf
[mysqld]datadir = /data/mysql
innodb_file_per_table = 1log-bin=master-binlog-bin-index=master-bin.indexserver-id = 1启动mysql# service mysqld start2 授权slave复制mysql> grant replication slave on *.* to 'replicationuser'@'192.168.8.31' identified by 'replicationuser';
mysql> flush privileges;
mysql> flush tables with read lock; # 锁住table为只读3 查看master二进制日志文件状态,在slave上需要使用mysql> show master status;+-------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+-------------------+----------+--------------+------------------+| master-bin.000001 | 355 | | |+-------------------+----------+--------------+------------------+mysql> show binlog events in "master-bin.000001";
slave1 修改配置文件
# vim /etc/my.cnf[mysqld]
datadir = /data/mysql
innodb_file_per_table = 1relay-log = relay-logrelay-log-index = relay-log.indexserver-id = 10启动mysql# service mysqld start2 配置slave同步设置,并启动slave复制mysql> change master to master_host='192.168.8.30',master_user='replicationuser',master_password='replicationuser',master_log_file='master-bin.000001',master_log_pos=355;
mysql> start salve;3 查看slave的状态mysql> show slave status\GSlave_IO_State: Waiting for master to send event Master_Host: 192.168.8.30 Master_User: replicationuser Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-bin.000001 Read_Master_Log_Pos: 438 Relay_Log_File: relay-log.000004 Relay_Log_Pos: 254 Relay_Master_Log_File: master-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 4384 在master查看slavemysql> show slave hosts;其他设置和说明1 slave上不允许数据库的写操作,因此在slave上设置为用户只读模式,但此设置对具有super权限的用户无效# vim /etc/my.cnf[mysqld]read-only = on
重启mysql,即生效# service mysqld restart重启mysqld,复制线程会自动重启
修改配置后,或者不重启,在数据库中直接修改参数也可以查看只读模式是否生效mysql> show global variables like 'read_only';+---------------+-------+| Variable_name | Value |+---------------+-------+| read_only | ON |+---------------+-------+2 为了保证master bin-log不在缓冲区缓存,立即同步到磁盘上,减少主从复制的延迟时间,在master设定[mysqld] sync-binlog = on重启mysql,即生效# service mysqld restart重启mysqld,复制线程会自动重启
修改配置后,或者不重启,在数据库中直接修改参数也可以查看立即同步模式是否生效
mysql> show global variables like 'sync_binlog';+---------------+-------+| Variable_name | Value |+---------------+-------+| sync_binlog | 0 |+---------------+-------+3 重启mysqld,复制线程会自动重启,存在哪些问题,如何禁止? 当master执行了一些误操作,由于延迟原因,误操作还未同步slave;此时在slave关闭mysql,备份数据恢复到master上,启动slave的mysql,让IO_thread跳过刚才的误操作,再启动复制功能。若slave启动后,主从复制立即开始,还会同步刚才的误操作。 不让其随mysql自动启动,防止同步误操作。
连接master 需要这两个文件master.info,relay-log.info,临时移除。slave无法连接master
在数据文件下
master.info 记录了登陆master和相关信息relay-log.info 记录了relay-log和master-bin的相关信息 4 从云服务器的相关日志会记录在slave的错误日志中。5 若master工作了一定时间,此时做主从的注意事项5.1 master锁表mysql> flush tables with read lock;
5.2 master mysql的数据库导出# mysqldump mydb > mydb.sql5.3 slave 创建同名数据库,并导入数据库# mysqldump mydb < mydb.sql
5.4 此时操作和全新的数据库是相同的,注意master_log_file,master_log_pos即可6 mysql复制过滤在master上# vim /etc/my.cnf[mysqld]binlog-do-db=db1,db2binlog-ignore-db=db1,db2
master binlog-ignore-db带来的问题 不记录部分数据库的二进制日志,二进制日志不完整。当云服务器崩溃时,只能恢复记录了二进制日志的数据,未记录的将不能恢复,因此不建议使用此选项。在slave上可以进行数据库级别的过滤,也可以进行表级别的过滤# vim /etc/my.cnf[mysqld]数据库级别replicate-do-db=replicate-ignore-db=
表级别replicate-do-table=replicate-ignore-table=在表级别使用通配replicate-wild-do-table=mydb.tb% # 仅复制mydb中以tb开头的所有表replicate-wild-ignore-table=mydb.tb_ # 仅复制mydb中以tb开头的、后面跟上一个字符的表slave replicate-ignore-db带来的问题 使用此选项,虽不记录指定slave数据库的二进制日志,但是中继日志是完整的,因此会占有slave的带宽资源。
综上,如果必须对表进行过滤,建议在slave上进行。半同步主从复制1 master 添加模块mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
mysql> set global rpl_semi_sync_master_enabled = 1;
mysql> show variables like 'rpl%';+------------------------------------+-------+| Variable_name | Value |+------------------------------------+-------+| rpl_recovery_rank | 0 || rpl_semi_sync_master_enabled | ON || rpl_semi_sync_master_timeout | 10000 | # 异步复制超时时间,单位ms| rpl_semi_sync_master_trace_level | 32 || rpl_semi_sync_master_wait_no_slave | ON | # 是否必须等待slave上线+------------------------------------+-------+2 slave 添加模块mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
mysql> set global rpl_semi_sync_slave_enabled = 1;
mysql> show variables like 'rpl%';+---------------------------------+-------+| Variable_name | Value |+---------------------------------+-------+| rpl_recovery_rank | 0 || rpl_semi_sync_slave_enabled | ON || rpl_semi_sync_slave_trace_level | 32 |+---------------------------------+-------+3 若此时主从同步是开启的,设置不会立即生效,需重启slave io_thread3.1 master状态查看mysql> show global status like 'rpl%';+--------------------------------------------+-------------+| 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 || Rpl_status | AUTH_MASTER |+--------------------------------------------+-------------+3.2 slave状态查看mysql> show global status like 'rpl%';+----------------------------+-------------+| Variable_name | Value |+----------------------------+-------------+| Rpl_semi_sync_slave_status | OFF || Rpl_status | AUTH_MASTER |+----------------------------+-------------+4 只重启io_thread即可mysql> stop slave io_thread;
mysql> start slave io_thread;
4.1 master状态查看mysql> show global status like 'rpl%';+--------------------------------------------+-------------+| Variable_name | Value |+--------------------------------------------+-------------+| Rpl_semi_sync_master_clients | 1 |+--------------------------------------------+-------------+
4.2 slave状态查看mysql> show global status like 'rpl%';+----------------------------+-------------+| Variable_name | Value |+----------------------------+-------------+| Rpl_semi_sync_slave_status | ON || Rpl_status | AUTH_MASTER |+----------------------------+-------------+5 测试 当半同步超时后(10000ms)一次后,会降级为异步复制。在slave停止io_threadmysql> stop slave io_thread;
在master进行写操作时,会卡住100000ms,之后降级为异步复制,恢复速度;6 为了使参数永久生效,在Master和Slave的my.cnf中编辑: # On Master [mysqld] rpl_semi_sync_master_enabled=1 rpl_semi_sync_master_timeout=1000 # 1 second # On Slave [mysqld] rpl_semi_sync_slave_enabled=1 7 mysql主从机制比较脆弱,若需重启master,需先要停止slave复制,即stop slave。监控和监控主从复制工具percona-toolkit(mattkit-tools)https://www.percona.com/downloads/percona-toolkit/# yum localinstall -y percona-toolkit-2.2.18-1.noarch.rpm --nogpgcheck安装之后会出现一大堆pt命令pt-slave-delay:使slave比master慢一些时间pt-table-checksum:通过单向加密比较主从的数据是否一致rhel使用的是光盘中的rpm库,无法解决percona的依赖yum localinstall时出现如下提示 You could try using --skip-broken to work around the problem You could try running: package-cleanup --problems package-cleanup --dupes rpm -Va --nofiles --nodigestThe program package-cleanup is found in the yum-utils packagemysql ssl 简要说明授权时,增加ssl选项,强制使用ssl;若无此选项,不受限制,即使启用了ssl功能,复制时使用和不使用ssl都可以mysql> grant replication slave on *.* to 'replicationuser'@'192.168.8.31' identified by 'replicationuser' require ssl;
ssl需要的内容mysql> show global variables like '%ssl%';+---------------+----------+| Variable_name | Value |+---------------+----------+| have_openssl | DISABLED || have_ssl | DISABLED || ssl_ca | || ssl_capath | || ssl_cert | || ssl_cipher | || ssl_key | |+---------------+----------+
对于以上关于怎么样配置mysql主从复制、mysql-5.5异步及半同步,大家是不是觉得非常有帮助。如果需要了解更多内容,请继续关注我们的行业资讯,相信你会喜欢上这些内容的。
数据
同步
主从
数据库
日志
二进制
配置
文件
时间
状态
级别
线程
内容
服务
信息
参数
服务器
权限
模式
用户
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发组织计划书
上海营销网络技术哪个好
搭建名片赞服务器
苏州阿里云服务器中小型
暗黑4服务器有哪些
网络安全系统设计销售认证资质
数据库系统的组织要素
芜湖ibm服务器内存条哪家好
vb 怎么导入数据库数据
广州天象网络技术公司
兰州网络技术学院
数据库中可以存图片吗
网络安全边缘计算应用
jsp登录按钮连接数据库
镇江网络技术培训中心
网络安全攻防配合工作
社区科普活动记录网络安全
关于单片机实验数据库
软件开发怎么写
怀旧服服务器哪个平台好
会员软件开发企业
小学生有关网络安全的手抄报大全
软件开发及运行后期维护合同
2022年tbc联盟优势服务器
网络安全演练2020
软件开发逻辑结构设计要点是什么
软件开发模式的演变
抖音说服务器升级中是怎么回事
怎么看一拳超人游戏上的服务器
华硕电脑服务器名称