设为首页 收藏本站
查看: 1908|回复: 0

[经验分享] MySQL主从复制步骤详解

[复制链接]

尚未签到

发表于 2018-10-7 09:35:22 | 显示全部楼层 |阅读模式
  MySQL主从复制步骤详解
  1 主从服务器开启时间同步(此项必须同步)
  [root@storage  ~]# ntpdate 172.18.0.1
在企业内网构建时必须开启时间同步,设置一个NTP服务器,使得主从服务器时间保持同步。此为前提。  2 恢复操作
  首先判断在构建主从复制架构时主服务器是否有数据。若是已有数据对其备份后在从服务器恢复。若主从架构的构建都为从0开始。可以略过此步。主从复制的起始点为备份操作时,主节点所处的日志文件及其事件位置。
  注意:从服务器的MySQL版本需和主服务器的版本相同或高于其版本
  3 配置主数据库
  [root@storage  ~]# vim /etc/my.cnf
  [mysqld]
  log_bin  = /var/log/mariadb/mysql-bin
  server-id  = 1
  innodb_file_per_table  = on
  skip_name_resolve  = on
  log_bin:该参数后跟文件路径表示开启二进制日志,所跟路径mysql用户必须有读写权限。建议与数据目录分别存放,并放置于不同磁盘所在分区,用以降低其损坏率。
  server-id:在做主从同步架构中,主服务器的server-id为1,从服务器不为1。
  Innodb_file_per_table:后跟on或者1为设置InnoDB为独立表空间模式,在设置此参数后使用InnoDB引擎的每个数据库的每个表都会创建一个独立的表空间,该项有一下特点:每个表都有自己独立的表空间;每个表的数据和索引都会存储在自己的表空间中。可以实现单表在不同数据库之间移动(单表导入,导出);空间可以回收(除drop table操作外,表空间不能自己回收)。
  skip_name_resolve:跳过使用DNS域名解析。
  启动服务(若数据库正在使用并开启binlog可不重启)
  [root@web  ~]# systemctl restart mariadb
  添加主从复制的用户:

  MariaDB  [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO  copyuser@'192.168.10.%'>  MariaDB  [(none)]> FLUSH PRIVILEGES;
  4 配置从数据库
  [root@storage1  ~]# vim /etc/my.cnf
  [mysqld]
  datadir=/var/lib/mysql/
  server-id=2
  relay_log=relay-log
  relay_log_index=relay-log.index
  read_only=1
  innodb_file_per_table=1
  skip_name_resolve=1
  datadir:指定数据所在目录
  server-id不能为1,当一主多从时,其server-id也最好不同
  relay_log:后跟路径表示开启中继日志,使用相对路径时表示在于数据目录在同一目录下。
  read_only:从服务器只读。其他与主服务器一致。
  启动服务:
  [root@  storage1 ~]# systemctl start mariadb
  与主服务器建立连接
  MariaDB  [(none)]> CHANGE MASTER TO MASTER_HOST=192.168.10.6,
  -> MASTER_USER=copyuser,
  -> MASTER_PASSWORD=copypass,
  -> MASTER_LOG_FILE=' mysql-bin.000005',
  -> MASTER_LOG_POS=24622;
  MASTER_LOG_FILE, MASTER_LOG_FILE为备份时截止的事务时间点。可在恢复时使用的备份目录下xtrabackup_info文件中找出。
  [root@ storage1~]# grep 'binlog_pos'  2017-11-13_20-29-22/xtrabackup_info
  binlog_pos = filename 'mysql-bin.000005', position '24622'
  当然,如果主从复制架构构建时为从0开始。需要在主服务器上使用以下命令查看:
  [root@storage  ~]# mysql
  MariaDB  [(none)]> show master status;
  +------------------+----------+--------------+------------------+
  |  File             | Position |  Binlog_Do_DB | Binlog_Ignore_DB |
  +------------------+----------+--------------+------------------+
  |  mysql-bin.000005 |    49652 |              |                  |
  +------------------+----------+--------------+------------------+
  1  row in set (0.00 sec)
  开启一个IO_THREAD线程
  MariaDB  [(none)]> START SLAVE ;
  START SLAVE [IO_THREAD|SQL_THREAD];# 启动复制线程,停止的话使用STOP
  主从复制架构中应注意要点:
  1 应限制从服务器为只读
  在从服务上设置read_only=ON;此限制对拥有SUPER权限的用户均无效
  如何阻止所有用户:
  mysq> FLUSH TABLES WITH READ LOCAK;    # 连上去不退出(测试时使用)
  2如何保证主从复制的事物安全?
  在主节点启用参数:sync_binlog=ON,即遇到事物提交时,必须将bin-log缓冲区中记录下来的事件立即刷写至磁盘上的二进制日志文件中,从而通知从节点来复制同步。也可使用sysnc_binlog=n的方式,来开启此选项,当n次事务提交之后,MySQL执行一次fsync之类的磁盘同步命令,将缓冲区中内容写入磁盘。当n=0时,表示当事务提交之后,只将binlog_cache中的数据写入bin_log文件,而不进行磁盘同步,这种方式性能最好,但无法保证事务安全性
  如果使用的是innodb存储引擎:
  innodb_flush_logs_at_trx_commit= 1    # 将内存中的事物相关立即写到磁盘上的事物日志中去。
  innodb_support_xa= ON      # xa:分布式式事物;即是否让innodb支持分布式事物,分布式提交
  在SLAVE节点:
  skip_slave_start= ON    # 关闭自动提交。选取手动启动,避免错误
  必要的时候可以开启# MariaDB[(none)]> show variables like "%relay_log%";
  主节点:
  sync_slave_start = ON
  从节点:
  sync_relay_log
  sync_relay_log_info
  所遇故障:
  使用备份恢复至从文件时在copy-back过程中出现Error: datadir must be specified.
  故障说明:
  说明是恢复时,未能找到数据恢复目录,此时只需要在mariaDB的配置文件中指定数据库文件目录即可
  解决办法:
  在配置文件中添加datadir参数。
  主从复制中半同步复制架构实现:
  根据前文所述首先构建主从复制架构,然后借助Google所提供的插件来实现半同步复制。
  Mysql支持多种插件,rpm安装方式,插件所在目录为/usr/lib64/mysql/plugin
  插件使用方法
  INSTALL  PLUGIN plugin_name SONAME 'shared_library_name';
  注意:插件名称与插件文件名并非对应,使用时应查阅官方文档
  半同步复制所用插件:
  semisync_master.so
  semisync_slave.so
  半同步复制配置步骤详解:
  1 配置主节点
  MariaDB  [(none)]>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
  MariaDB  [(none)]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';
DSC0000.png

  查看到rpl_semi_sync_master_enabled状态为off状态,需把其打开。使用set命令
  MariaDB  [(none)]> SET GLOBAL rpl_semi_sync_master_enabled=1;
  2 配置从节点
  MariaDB  [(none)]>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
  MariaDB  [(none)]>SHOW GLOBAL VARIABLES LIKE  'rpl_semi%';
  MariaDB  [(none)]> SET GLOBAL rpl_semi_sync_slave_enabled=1;
  rpl_semi_sync_slave_enabled的状态也需设置为ON状态
DSC0001.png

  3 重启从节点的IO_THIREAD线程并查看从节点状态
  MariaDB  [(none)]> STOP SLAVE;
  MariaDB  [(none)]> START SLAVE;
  MariaDB  [(none)]> SHOW SLAVE STATUS\G #确定节点状态无误并保证其IO_THREAD和SQL_THREAD线程正常启用后方能成功
  4 验证
  MariaDB  [(none)]> show global status like 'rpl_semi_sync_master_clients'; #在主节点查从节点的个数
  MariaDB  [(none)]> show global status like 'rpl_semi%'; 或查看其参数可以使用insert或者建库建表语句对其进行测试,查看状态
DSC0002.png



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-614195-1-1.html 上篇帖子: MySQL数据库主主复制 下篇帖子: MySQL复制过滤器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表