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

    主从复制是MySQL中最重要的功能之一。主从复制是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。对于多级复制,数据库服务器即可充当主机,也可充当从机。MySQL主从复制的基础是主服务器对数据库修改记录二进制日志,从服务器通过主服务器的二进制日志自动执行更新。

    主从复制的类型:

    1.基于语句的复制

    主服务器上面执行的语句在从服务器上面再执行一遍
    存在的问题:时间上可能不完全同步造成偏差,执行语句的用户也可能不是同一个用户。

    2.基于行的复制

    把主服务器上面改编后的内容直接复制过去,而不关心到底改变该内容是由哪条语句引发的
    存在的问题:比如一个工资表中有一万个用户,我们把每个用户的工资+1000,那么基于行的复制则要复制一万行的内容,由此造成的开销比较大,而基于语句的复制仅仅一条语句就可以了。

    3.混合类型的复制

    MySQL默认使用基于语句的复制,当基于语句的复制会引发问题的时候就会使用基于行的复制,MySQL会自动进行选择。

    主从复制的原理:

    主服务器上面的任何修改都会保存在二进制日志Binary log里面
    从服务器上面启动一个I/O thread,连接到主服务器上面请求读取二进制日志,然后把读取到的二进制日志写到本地的一个Realy log(中继日志)里面。
    从服务器上面开启一个SQL thread定时检查Realy log,如果发现有更改立即把更改的内容在本机上面执行一遍。

    主从复制的步骤:

    主服务器:ip:192.168.10.139  系统:Rhel7 数据库Maria DB            
    从服务器:ip:192.168.10.129  系统:Centos6.5  数据库:MySQL

    主服务器配置:

    • 修改主服务器配置文件 /etc/my.cnf  ,修改完后需要重启mysql服务
    1 [mysqld]
    2 log-bin=mysql-bin         //启用二进制日志 (必选)
    3 server-id=139             //设置服务器唯一ID,一般取IP最后一段(必选)
    4 binlog-do-db=140          //指定对db_nameA记录二进制日志 (可选) 
    5 binlog-ignore-db=mysql    //指定不对db_namB记录二进制日志(可选)
    • 为从服务器添加mysql账户并配置权限,在主服务器上,必须为从服务器创建一个用来连接主服务器的用户,并设置replication slave权限
    1 mysql>grant  replication  slave  on  *.*   to  backup@'192.168.10.129'   identified   by   '123';    
    2  //创建backup用户,密码为123,并且配置好权限
    • 刷新权限:flush   privileges;
    • 验证是否开启主从复制:
    1 select * from user where user = 'backup'  G;
    • 查看主服务器正在使用二进制日志状态:
    show master status;

    从服务器配置 :

    • 修改从服务器配置文件 /etc/my.cnf  ,修改完后需要重启mysql服务:service  mysqld restart
    1 [mysqld]
    2 server-id=129              //必须服务器唯一ID,一般取IP最后一段
    • 进入数据库,设置主服务器信息:
    1 mysql> change master to master_host='192.168.10.139',
    2     -> master_user='backup',
    3     -> master_password='123',
    4     -> master_log_file='mysql-bin.000001',
    5     -> master_log_pos=245;
    • 开启从服务器复制二进制日志,实现同步功能: slave  start ;
    • 验证数据库相关参数: show  slave  status  G;

    数据库的备份和还原:

    衡量备份还原的指标:

    • RPO:恢复点目标,恢复的程度
    • RIO:恢复时间目标,恢复花费的时间

    备份方式:

    • 冷备份:拷贝数据库目录,需要先停机再备份,对于在线不间断提供业务的不适用
    • 快照备份:lvm快照,mysql装在lvm创建的分区,可以热备份(在线备份),缺点在于所有的文件,包括数据、日志等需要存放在一个逻辑卷中,然后再对卷快照备份,只支持本地备份,生产环境用的也比较少
    • 逻辑备份: mysqldump工具,单线程备份,备份速度较慢;mydumper工具,mysqldump升级版,有限制条件

    备份单个库:

    • 备份:
      mysqldump  -uroot  -p   dbname1> 1.sql
    • 还原:
      mysql  -uroot  -p   dbname2 < 1.sql

    备份多个库:

    • 备份:
      mysqldump  -uroot  -p  --database  db1  db2 > 1.sql
    • 还原: 
      mysql  -uroot -p  < 1.sql

    备份全部库:

    • 备份:
      mysqldump  -uroot  -p  --all-databases >  1.sql
    • 还原:
      mysql  -uroot  -p  <  1.sql

    备份单个表:

    • 备份:
      mysqldump  dbname1  tb1 >  1.sql
    • 还原: 
      mysql  -uroot  -p   dbname2 <  1.sql
  • 相关阅读:
    【git】git命令集合
    【maven】【IDEA】idea中使用maven编译项目,报错java: 错误: 找不到符号 【2】
    【mybatis】mybatis传参的几种方式
    【EasyExcel】使用easyExcel过程中,项目报错的解决集合
    【Maven】【IDEA】在idea中开发web项目,解决maven的jar包冲突的方法
    【Easyexcel】java导入导出超大数据量的xlsx文件 解决方法
    【maven】idea的pom文件修改,引入新的jar包,无效,本地仓库始终没有下载新jar包的问题解决【idea pom Dependency not found】
    【java】javac编译多个有依赖关系的java文件为class文件
    【java】javac命令在win10不可用,提示javac不是内部或外部命令,也不是可运行的程序【解决方法】
    【POI】java服务生成List数据集合,后台服务生成xlsx临时文件,并将临时文件上传到腾讯云上,并实现xlsx浏览器预览
  • 原文地址:https://www.cnblogs.com/xiuercui/p/13416638.html
Copyright © 2011-2022 走看看