mysql 热备
在运维中需定期备份mysql,为崩溃后的恢复数据做准备。一般分为冷备和热备,冷备就是停掉mysql服务,直接cp文件,但是在生产环境中,很 少有机会这样,一般都是在mysql提供服务的时候就进行备份,因此这牵扯到数据一致性的问题。所以,在MyISAM存储引擎下,我们的思路就是:锁表 –>备份–>解锁
# 进入mysql环境 锁表root@mysql : test > flush tables with read lock;# 在系统环境下 备份cp -R test /tmp/backup/test_back# 进入mysql环境 解锁root@mysql : test > unlock tables;
mysqlhotcopy 热备工具
当然也可通过mysql自带的工具 mysqlhotcopy 解决,事实上mysqlhotcopy是个perl程序,提供MyISAM下的锁表备份解锁操做。因为是perl脚本,所以需要机器上有PERL-DBD 模块,不然会报错: Can’t locate DBI.pm in @INC ,安装过程很简单,在这里:
mysqlhotcopy也很简单,参数可用 –help 查看
# 备份test库为新的test_tmp库,与test同级目录 mysqlhotcopy --user=root --password=root test test_tmp # 备份test库 到 /tmp/ 目录下 mysqlhotcopy --user=root --password=root test /tmp/ # --checkpoint dbinfo.checkpoint 这个是指定存放操作记录的数据库/表# --addtodest 增量备份,新的备份自动覆盖掉原来的mysqlhotcopy --user=root --password=root --checkpoint=dbinfo.checkpoint --addtodest test /tmp/
mysqlhotcopy的安装方法如下:
yum -y install perl perl-DBI wget tar zxvf DBD-mysql-3.0002.tar.gz cd DBD-mysql-3.0002 perl Makefile.PL –mysql_config=/usr/local/mysql/bin/mysql_config make make test
make install
记录到到数据库的方法:
1、在数据库段分配一个专门用于备份的用户 mysql> grant select,reload,lock tables on *.* to 'hotcopyer'@'localhost' identified by '123456'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) 2、在/etc/my.cnf或者登陆用户的个人主文件.my.cnf里面添加 [mysqlhotcopy] interactive-timeout user=hotcopyer password=123456 port=3306
重新加载mysql 3、可以把记录写到专门的表中。具体察看帮助。 mysql> create database hotcopy; Query OK, 1 row affected (0.03 sec) mysql> use hotcopy Database changed mysql> create table checkpoint(time_stamp timestamp not null,src varchar(32),dest varchar(60), msg varchar(255)); Query OK, 0 rows affected (0.01 sec) 同时记得给hotcopyer用户权限。 mysql> grant insert on hotcopy.checkpoint to hotcopyer@'localhost'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> quit; 4、备份数据(写入数据库{备份的结果},增量备份) /usr/local/mysql/bin/mysqlhotcopy --user=root --password=mysql --checkpoint=hotcopy.checkpoint --addtodest radius /bak
5、查看 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | 1234la | | conntrack | | hotcopy | | mysql | | pinphp | | radius | | test | | vod | | web | +--------------------+ 10 rows in set (0.00 sec) mysql> show tables; +-------------------+ | Tables_in_hotcopy | +-------------------+ | checkpoint | +-------------------+ 1 row in set (0.00 sec) mysql> select * from checkpoint; +---------------------+--------+---------------+-----------+ | time_stamp | src | dest | msg | +---------------------+--------+---------------+-----------+ | 2012-08-25 21:50:26 | radius | /bak/radius | Succeeded | +---------------------+--------+---------------+-----------+ 1 row in set (0.00 sec) mysql>