mysqlhotcopy

Mysqlhotcopy备份方法 
Mysqlhotcopy 是一个 PERL 程序。它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上。 
mysqlhotcopy 只能用于备份 MyISAM,并且只能运行在 类Unix 和 NetWare 系统上。 mysqlhotcopy 支持一次性拷贝多个数据库,同时还支持正则表达。 
msqlhotcopy和mysqldump对比: 
1、前者是文件意义上的COPY,后者是一个数据库端的SQL语句集合。 2、前者只能运行在数据库目录所在的机器上,后者可以用在远程客户端。 3、相同的地方都是在线执行LOCK TABLES 以及 UNLOCK TABLES 
4、前者恢复只需要COPY备份文件到源目录覆盖即可,后者需要倒入SQL文件到原来库中。(source 或者\.或者 mysql < 备份文件)。 
5、前者只适用于 MyISAM 引擎,而后则则可同时使用于MyISAM引擎和InodDB引擎. 6、前者在使用前必须安装perl-DBD-mysql包,而后者则不需要. 
试验环境: 
虚拟机操作系统:Centos 5.5 数据库版本:mysql 5.1.49 
perl-DBD-mysql-4.014  (Mysqlhotcopy需要有perl-dbd模块的支持) mysql数据库目录:/var/lib/mysql mysql数据库备份路径:/backup/mysql 
1、设置/etc/my.cnf,重启mysqld服务,之后使用msqlhotcopy就不用输入用户密码 [mysqlhotcopy] interactive-timeout user=root 
password=123456 port=3306 
2、备份方法 
# mysqlhotcopy mysqldb_name /backup/ 
// 备份mysql整个数据库 
# mysqlhotcopy -u root -p 123456 mysql /backup/mysql 
// 同时备份mysql和test1两个数据库 
# mysqlhotcopy -u root -p 123456 mysql test1 /backup/mysql 
// 备份 mysql数据库里的user表,支持正则表达式 
# mysqlhotcopy -u root -p 123456 mysql./user*/ /backup/mysql 
3、备份查询 
可以将每次的备份写入数据库,日后查询备份记录. 
// 创建hotcopy数据库并建立表格 
mysql> create database hotcopy; mysql> use hotcopy 
mysql> create table checkpoint(time_stamp timestamp not null,src varchar(32),dest varchar(60), msg varchar(255)); mysql> select * from checkpoint; 
+---------------------+-------+------------+-----------+ | time_stamp          | src   | dest       | msg       | +---------------------+-------+------------+-----------+ | 2010-07-30 14:11:45 | mysql | /tmp/mysql | Succeeded | | 2010-07-30 14:12:37 | test1 | /tmp/test1 | Succeeded | +---------------------+-------+------------+-----------+ 2 rows in set (0.00 sec)  
4、恢复方法 
// 复制备份的数据库test到相应目录,注意目录的权限。 
# /bin/cp -rf /backup/mysql/test/ /var/lib/mysql/  5、选项解释 
// 显示帮助消息并退出。 
--help 
// 如果目标存在不放弃(加上一个_old后缀重新命名它)。 
--allowold 
// 不要重命名目标目录(如果存在);新的备份自动覆盖原来的,可以实现增量备份。 
--addtodest 
// 在指定的db_name.tbl_name插入检查点条目。 
--checkpoint=db_name.tbl_name 
// 启用调试输出。 
--debug 
// 报告动作而不执行它们。 
--dryrun,-n 
// 所有表锁定后刷新日志。 
--flushlog 
// 完成后不删除以前(重新命名的)的目标。 
--keepold 
// 复制方法(cp或scp)。 
-- method=command 
// 备份中不包括全部索引文件。这样使备份更小、更快。可以在以后用myisamchk -rq重新构建索引。 
--noindices 
// 当连接服务器时使用的密码。请注意该选项的密码值是不可选的,不象其它MySQL程序。 
--password=password,-p password 
// 当连接本地服务器时使用的TCP/IP端口号。 
--port=port_num,-P port_num 
// 除了出现错误时保持沉默。 
--quiet,-q 
// 复制所有数据库名匹配给出的正则表达式的数据库。 
--regexp=expr 
// 用于连接的Unix套接字文件。 
--socket=path,-S path 
// 所复制的数据库名的后缀。 
--suffix=str 
// 临时目录(代替/tmp)。 
--tmpdir=path 
// 当连接服务器时使用的MySQL用户名.要想执行mysqlhotcopy,你必须可以访问备份的表文件,具有那些表的SELECT权限和RELOAD权限(以便能够执行FLUSH TABLES). 
--user=user_name,-u user_name 
6、备份脚本 
1)建立数据库自动备份脚本 # vi mysql-backup.sh  
#!/bin/bash 
PATH=/usr/local/sbin:/usr/bin:/bin # The Directory of Backup BACKDIR=/backup/mysql  
# The Password of MySQL ROOTPASS=123456    
# Remake the Directory of Backup rm -rf $BACKDIR mkdir -p $BACKDIR  
# Get the Name of Database 
DBLIST=`ls -p /var/lib/mysql | grep / | tr -d /` # Backup with Database for dbname in $DBLIST do 
mysqlhotcopy $dbname -u root -p $ROOTPASS $BACKDIR | logger -t mysqlhotcopy done 
2)测试脚本运行 
// 给脚本增加执行权限 
# chmod 700 mysql-backup.sh 
// 运行脚本 
# ./mysql-backup.sh 
// 查看备份是否成功 
# ll /backup/mysql 
// 设置备份脚本每天自动运行 
# crontab –e 
// 在文本里添加下面一行 
00 03 * * * /root/mysql-backup.sh   
// 查看作业情况
# crontab -l 
00 03 * * * /root/mysql-backup.sh
    A+
发布日期:2021年07月14日  所属分类:未分类

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: