378 发表于 2018-9-30 11:28:34

Mysql AB复制

  Mysql备份与AB复制
  复制有两种方式:同步复制(msylq-cluster) 异步复制(mysql-m/s主从备份又称作双机热备)
  一、Mysql完全备份(冷备份方式和mysqldump工具)
  1、冷备份方式:(必须得停掉mysql服务)
  /etc/init.d/mysqld stop
  将相关文件CP到别的地方,还原的时候需要将文件更改属主属组为mysql即可
  /etc/init.d/mysqld start
  2、mysqldump工具:
  mysqldump -u root -p密码 test > /srv/test.sql (备份test数据库)
  mysqldump -u root -p --all-databases > /srv/alldata.sql (备份所有的数据库)
  恢复方式:mysql -u root -p密码 test < /srv/test.sql(导入test数据库)
  mysql -u root -p密码 < /srv/alldata.sql(导入所有数据)
  二、增量备份(使用时间来恢复和使用位置号来恢复)
  mysql的增量备份使用的方法的是用过mysql的二进制日志来实现的,二进制日志中保存了对mysql的所有操作sql语句;mysql的二进制日志功能默认是关闭的,我们需要自己手动打开;
  打开方式: vim /etc/my.cnf 添加
  log-bin=binlog(开启binlog文件功能)
  log-bin-index=binlog.index(建立binlog索引文件)
  重新启动服务后就会在/var/lib/mysql 中发现binlog 二进制文件;
  二进制的日志文件我们需要使用命令mysqlbinlog 来查看;
  mysqlbinlog binlogfilename
  1、使用时间来恢复:
  例如:mysqlbinlog --start-date=&quot;2012-02-29 9:46:04&quot; --stop-date=&quot;2012-02-29 13:47:24&quot; /var/lib/mysql/binlog.000004 | mysql -u root
  (对start和stop时间段的sql语句交给mysql执行,就能恢复这段时间的数据)
  2、使用位置号来恢复:
  例如:mysqlbinlog /var/lib/mysql/binlog.000001 4 --stop-position 185 | mysql -u root
  (将binlog文件中at4到at185上一个at 的数据恢复到数据库中 以root身份执行)
  
  三、Mysql的AB复制:(同步和异步复制)
  原理: Master必须开启binlog功能
  Slave通过I/O线程读到binlog文件并写入到relaylog文件
  SQL线程会将relaylog文件重新执行到Slave的Mysql中.
  在做AB复制之前一定要保证Master与Slave的数据是一样的,并且保证数据时Master给Slave.
  主库master:192.168.18.51 从库slave:192.168.18.52
  1、在master和slave上安装mysql
  yum install mysql mysql-server -y (主从机都要安装mysql)
  2、在master上修改/etc/my.cnf文件,添加
  
  server-id=1
  #区别master和slave
  log-bin=binlog
  #启动二进制日志文件功能
  log-bin-index=binlog.index
  #添加二进制日志的索引文件
  #binlog-do-db=test
  #二进制文件需要同步的数据库名(不写为同步所有数据)
  #binlog-ignore-db=mysql
  #不同步mysql数据库数据,以免发生因同步了用户信息而从机出现登录问题
  然后重启服务:service mysqld restart
  3、授权给用户:
  master登录数据库:
  # mysql

  mysql> grant replication slave on *.* to 'k3'@'192.168.18.51'>  mysql> flush privileges;
  给主机192.168.18.51用户slave授权,密码123。
  在从库slave上测试:
  #mysql -uk3 -p123 -h 192.168.18.51
  mysql>
  OK正常登录,用户建立成功。
  4、在slave上修改/etc/my.cnf文件,添加
  
  server-id=2
  #从库ID号,和主库区别开
  relay_lo =/var/lib/mysql/mysql-relay-bin
  #开启slave上的relaylog功能
  relay_log_index=/var/lib/mysql/mysql-relay-bin.index
  #建立relaylog索引文件
  
  5、在master上查看主库状态:
  # mysql
  mysql> show master status \G;
  *************************** 1. row ***************************
  File: binlog.000002
  Position: 1932
  1 row in set (0.00 sec)
  可以知道File(mysql-bin.000002),Position(1932)
  这里需要注意一点 如果是生产环境可能数据库随时都有写的可能 就需要通过下面的命令锁定一下数据库之后做完操作在解锁
  mysql> flush tables with read lock;
  #锁定表不让写
  mysql>unlock tables;
  #解锁
  6、在slave上查看从库状态:
  # mysql
  mysql> slave stop;
  Query OK, 0 rows affected, 1 warning (0.00 sec)
  mysql> change master to master_host='192.168.0.57',master_user='k3',master_password='123',master_log_file='mysql-bin.000002',master_log_pos=1932;
  Query OK, 0 rows affected (0.13 sec)
  mysql> start slave;
  Query OK, 0 rows affected (0.00 sec)
  mysql> show slave status \G;
  Slave_IO_Running: Yes   (从库I/O读写正常)
  Slave_SQL_Running: Yes    (从库mysql监听正常)
  测试一下
  # mysql
  mysql> create database lol;
  
  # mysql
  mysql> show databases;
  +--------------------+
  | Database         |
  +--------------------+
  | information_schema |
  | lol                |
  | mysql            |
  | test               |
  +--------------------+
  5 rows in set (0.00 sec)
  OK已经过来了!

页: [1]
查看完整版本: Mysql AB复制