zoukankan      html  css  js  c++  java
  • 数据库主从复制

    注意:mysql版本最好一致,否则可能存在二进制文件识别出错

    第一步:修改配置文件 windows环境 修改my.ini (在mysql安装目录下)linux环境 /etc/my.cnf 修改完需要重启服务器
    在[mysqld] 下添加
    必须 1.server-id=xxx ##数据库唯一标识,必须不同
    必须 2.log-bin=文件名 ##表示打开binlog,打开该选项才可以通过I/O写到Slave的relay-log,也是可以进行replication的前提;
    3.binlog-do-db=xxx ##表示需要记录二进制日志的数据库。如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项
    4.binlog-ignore-db=xxx ##表示不需要记录二进制日志的数据库。如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项
    必须 5.replicate-do-db ##表示需要同步的数据库,如果有多个数据库可用逗号分隔,或者使用多个replicate-do-db选项
    6.replicate-ignore-db ##表示不需要同步的数据库,如果有多个数据库可用逗号分隔,或者使用多个replicate-ignore-db=MySQL选项
    7.log-slave-updates=1或0,默认关闭 ##配置从库上的更新操作是否写入二进制文件,如果这台从库,还要做其他从库的主库,那么就需要打这个参数,以便从库的从库能够进行日志同步
    8.slave-skip-errors=[err1,err2,...all] ##在复制过程,由于各种原因导致binlog中的sql出错,默认情况下,从库会停止复制,要用户介入。
    ##可以设置slave-skip-errors来定义错误号,如果复制过程中遇到的错误号是定义的错误号,便可以跳过。
    ##如果从库是用来做备份,设置这个参数会存在数据不一致,不要使用。如果是分担主库的查询压力,可以考虑。
    9.sync_binlog ##sync_binlog的默认值是0,这种模式下,MySQL不会同步到磁盘中去。这样的话,MySQL依赖操作系统来刷新二进制日志binary log,
    ##就像操作系统刷其他文件的机制一样。因此如果操作系统或机器(不仅仅是MySQL服务器)崩溃,有可能binlog中最后的语句丢失了。
    ##要想防止这种情况,你可以使用sync_binlog全局变量,使binlog在每N次binlog写入后与硬盘同步。
    ##当sync_binlog变量设置为1是最安全的,因为在crash崩溃的情况下,你的二进制日志binary log只有可能丢失最多一个语句或者一个事务。
    ##但是,这也是最慢的一种方式(除非磁盘有使用带蓄电池后备电源的缓存cache,使得同步到磁盘的操作非常快)。
    ##即使sync_binlog设置为1,出现崩溃时,也有可能表内容和binlog内容之间存在不一致性。
    ##如果使用InnoDB表,MySQL服务器处理COMMIT语句,它将整个事务写入binlog并将事务提交到InnoDB中。
    ##如果在两次操作之间出现崩溃,重启时,事务被InnoDB回滚,但仍然存在binlog中。
    ##可以用–innodb-safe-binlog选项来增加InnoDB表内容和binlog之间的一致性。
    ##(注释:在MySQL 5.1中不需要–innodb-safe-binlog;由于引入了XA事务支持,该选项作废了),
    ##该选项可以提供更大程度的安全,使每个事务的 binlog(sync_binlog =1)和(默认情况为真)InnoDB日志与硬盘同步,
    ##该选项的效果是崩溃后重启时,在滚回事务后,MySQL服务器从binlog剪切回滚的 InnoDB事务。
    ##这样可以确保binlog反馈InnoDB表的确切数据等,并使从服务器保持与主服务器保持同步(不接收回滚的语句)。
    10.auto_increment_offset ##增量初值
    11.auto_increment_increment ##增量值
    ##9和10组合使用解决同步过程中自增主键冲突
    12.slave_net_timeout ##单位为秒 默认设置为 3600秒 减少因网络原因造成的延迟

    第二步:设置主服务器slave (注:在不需要双机备份的情况下,不需要设置slave,只需要从服务器设置slave)
    1.登陆mysql mysql -u user -p dbname
    附加:查看master信息
    show master status
    2.停止同步传输过程 stop slave;
    3.设置slave
    3.1
    change master to
    master_host='192.168.1.118', ##主机地址 (必须)
    master_user='root', ##主机拥有同步权限的用户 (必须)
    master_password='12345', ##密码 (必须)
    master_log_file='mysql-bin.000023', ##主服务器上查询的二进制文件名称 对应file (一般从服务器会从主服务器直接读取,在同步过程出现异常或者中断需要人为干预,需要记录该值)
    master_log_pos=107, ##主服务器文件记录位置 对应position (一般从服务器会从主服务器直接读取,在同步过程出现异常或者中断需要人为干预,需要记录该值)
    master-connect-retry=60; ##服务器重连时间默认60秒 减少因网络原因造成的延迟
    4.启动slave
    start slave;
    5.查看slave 状态(show slave statusG;)
    slave状态中
    Slave_IO_Running: Yes ##说明可以正常进行IO操作---与主机进行通信
    Slave_SQL_Running: Yes ##说明可以正常执行sql 语句 ---负责自身sql操作
    注意:只有同时为Yes时,才可正常进行主从复制
    解决方案:IO错误,要检查主从服务器之间的通信状态以及数据库之间通信状态
    SQL错误, 1.检查主机processlist show prcesslist查看是否有挂起的任务
    2.show slave statusG; 查看错误情况 需要跳过错误继续执行同步,
    先关闭slave,然后 set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;跳过错误,再次启动slave,(一般是)
    3.重新设置主从
    3.1 进入主库锁表 FLUSH TABLES WITH READ LOCK;
    3.2 导出要备份的数据库 mysqldump -u root -p backuptest>bacuptest.sql
    3.3 进入从服务器新建数据库 导入数据 source bacuptest.sql;
    3.4 停止slave stop slave,
    3.5 从主服务器重新获取二进制文件和位置信息(设置master,同3.1 二进制文件名称和记录位置必须)
    3.6 启动slave;

    第三步:设置从服务器slave
    1、如果需要实现双机互为备份,需要和主服务器同样的设置
    2、问题解决同第二步



    Mysql数据库主从复制

    延迟
    一般通过架构调优解决
    比如主库是写,对数据安全性较高,sync_binlog=1,innodb_flush_log_at_trx_commit = 1
    从库是读,sync_binlog=0

    读写分离
    注:一般做读写分离需要主库和从库有一个共有的用户

    1、框架实现后台数据库切换
    2、mysql_proxy(lua脚本实现,lua脚本配置复杂)
    3、Amoeba for MySQL(使用较方便,但不支持事务和存储过程)

  • 相关阅读:
    Burp Suite抓包使用步骤
    抓包工具Burp Suite安装步骤(待补充)
    mysql版本和模式查询
    git仓库下拉和上传
    git仓库个人和企业版新增仓库和成员
    漏洞扫描工具acunetix破解安装步骤
    漏洞扫描工具acunetix12会遇到的问题
    memcached缓存:安装和清缓存
    oracle数据库备份、还原命令及常见问题(待补充)
    Linux中,关闭selinux
  • 原文地址:https://www.cnblogs.com/zhshto/p/6566512.html
Copyright © 2011-2022 走看看