千家信息网

怎么样配置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-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异步及半同步,大家是不是觉得非常有帮助。如果需要了解更多内容,请继续关注我们的行业资讯,相信你会喜欢上这些内容的。

0