Heim > Datenbank > MySQL-Tutorial > MySQL备份与AB复制

MySQL备份与AB复制

WBOY
Freigeben: 2016-06-07 17:15:43
Original
991 Leute haben es durchsucht

Mysql备份与AB复制复制有两种方式:同步复制(msylq-cluster) 异步复制(mysql-m/s主从备份又称作双机热备)一、Mysql完全备份(

Mysql备份与AB复制
复制有两种方式:同步复制(msylq-cluster) 异步复制(mysql-m/s主从备份又称作双机热备)

一、Mysql完全备份(纯复制方式和mysqldump工具)
1、纯复制方式:(必须得停掉mysql服务)
/etc/init.d/mysqld stop
tar -zcvf mysql_backup.tgz /var/lib/mysql/
/etc/init.d/mysqld start
恢复方式:tar包解压覆盖原路径文件,缺点是不同版本数据不兼容
2、mysqldump工具:
mysqldump -uroot -p test > /srv/test.sql (备份test数据库)
mysqldump -uroot -p --all-databases > /srv/alldata.sql (备份所有的数据库)
恢复方式:mysql -uroot -p test mysql -uroot -p

二、增量备份(使用时间来恢复和使用位置号来恢复)
mysql的增量备份使用的方法的是用过mysql的二进制日志来实现的,二进制日志中保存了对mysql的所有操作sql语句;mysql的二进制日志功能默认是关闭的,我们需要自己手动打开;
打开方式: vim /etc/my.cnf 添加
log-bin=noah 默认为log-bin=binlog;
重新启动服务后就会在/var/lib/mysql 中发现binlog 二进制文件;
二进制的日志文件我们需要使用命令mysqlbinlog 来查看;

1、使用时间来恢复:
例如:mysqlbinlog --start-date="2012-02-29 9:46:04" --stop-date="2012-02-29 13:47:24" /var/lib/mysql/binlog.000004 |mysql -uroot -pwestos (帐号root密码westos,对start和stop时间段的sql语句交给mysql执行,就能恢复这段时间的数据)
2、使用位置号来恢复:
例如:mysqlbinlog --start-position="106" --stop-position="1472" /var/lib/mysql/binlog.000003 |mysql -uroot -pwestos
注:时间和位置号都可以通过mysqlbinlog命令查看。

三、Mysql的AB复制:(同步和异步复制)
下面做单向热备实验:
主库master:192.168.0.57 从库slave:192.168.0.95

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

2、在master上修改/etc/my.cnf文件,添加
server-id=1 //区别master和slave
log-bin=mysql-bin //启动二进制日志文件功能
binlog-do-db=test //二进制文件需要同步的数据库名(不写为同步所有数据)
binlog-ignore-db=mysql //不同步mysql数据库数据,以免发生因同步了用户信息而从机出现登录问题
然后重启服务:service  mysqld restart

3、授权给用户:
master登录数据库:
[root@desktop57 ~]# mysql -uroot -pwestos
mysql> grant replication slave,reload,super on *.* to 'slave'@'192.168.0.95' identified by "10086";
mysql> flush privileges;
给主机192.168.0.95用户slave授权,密码10086。

在从库slave上测试:[root@desktop95 ~]# mysql -uslave -p10086 -h 192.168.0.57
OK正常登录,用户建立成功。

4、在slave上修改/etc/my.cnf文件,添加
server-id=2 //从库ID号,和主库区别开 (注意这一行的注释去掉,不然mysql起不来,可看日志)
master-host=192.168.0.57 //指定主库IP地址
master-user=slave //指定授权的用户名
master-password=10086 //指定授权用户的密码
replicate-do-db=test //要同步的数据库
replicate-ignore-db=mysql //忽略mysql数据库的同步

5、在master上查看主库状态:
[root@desktop57 ~]# mysql -uroot -pwestos
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      571 | test         | mysql            |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

可以知道File(mysql-bin.000001),Position(571)

6、在slave上查看从库状态:
[root@desktop95 ~]# mysql -uroot -pwestos

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='slave',master_password='10086',master_log_file='mysql-bin.000001',master_log_pos=571;  (指定从库应该备份的任务号,以slave用户登录密码10086)
Query OK, 0 rows affected (0.13 sec)

mysql> slave start;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G
        ......
             Slave_IO_Running: Yes    (从库I/O读写正常)
            Slave_SQL_Running: Yes    (从库mysql监听正常)
        ......
OK啦,没有的话就检查配置文件是否正确吧~~
我们测试一下看从库slave是否同步了master的数据呢?
[root@desktop57 ~]# mysql -uroot -pwestos
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| grade          |
+----------------+
1 row in set (0.00 sec)

mysql> select * from grade;
+-------+-----+-------+--------+
| name  | num | grade | notes  |
+-------+-----+-------+--------+
| kevin | 14  | 98    | great! |
+-------+-----+-------+--------+
1 rows in set (0.01 sec)

OK,,已经同步过来啦!!

linux

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage