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="2012-02-29 9:46:04" --stop-date="2012-02-29 13:47:24" /var/lib/mysql/binlog.000004 | mysql -u root

(startstop时间段的sql语句交给mysql执行,就能恢复这段时间的数据)


2
、使用位置号来恢复:
例如:mysqlbinlog /var/lib/mysql/binlog.000001 4 --stop-position 185 | mysql -u root

(binlog文件中at4at185上一个at 的数据恢复到数据库中 以root身份执行)

三、MysqlAB复制:(同步和异步复制)

原理: Master必须开启binlog功能

Slave通过I/O线程读到binlog文件并写入到relaylog文件

SQL线程会将relaylog文件重新执行到SlaveMysql.

在做AB复制之前一定要保证MasterSlave的数据是一样的,并且保证数据时MasterSlave.

 

主库master192.168.18.51 从库slave192.168.18.52

1、在masterslave上安装mysql
yum install mysql mysql-server -y (
主从机都要安装mysql)

 

2、在master上修改/etc/my.cnf文件,添加

[mysqld]
server-id=1

#区别masterslave
log-bin=binlog

#启动二进制日志文件功能

log-bin-index=binlog.index

#添加二进制日志的索引文件
#binlog-do-db=test

#二进制文件需要同步的数据库名(不写为同步所有数据)
#binlog-ignore-db=mysql

#不同步mysql数据库数据,以免发生因同步了用户信息而从机出现登录问题
然后重启服务:service mysqld restart

 

3、授权给用户:
master
登录数据库:
 
[root@kys1230 ~]# mysql

mysql> grant replication slave on *.* to 'k3'@'192.168.18.51' identified by "123";
mysql> flush privileges;
给主机192.168.18.51用户slave授权,密码123

在从库slave上测试:

[root@zhy1230 ~]#  mysql -uk3 -p123 -h 192.168.18.51

mysql>
OK
正常登录,用户建立成功。

 

4、在slave上修改/etc/my.cnf文件,添加

[mysqld]
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上查看主库状态:
[root@kys1230 ~]# 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上查看从库状态:
[root@zhy1230 ~]# 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监听正常)

测试一下

[root@kys1230 ~]# mysql

mysql> create database lol;

[root@zhy1230 ~]# mysql

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| lol                |

| mysql              |

| test               |

+--------------------+

5 rows in set (0.00 sec)

 

OK已经过来了!

你可能感兴趣的:(mysql,备份,热备份,AB复制)