我以前备份都使用mysqldump 导成文本文件便于存放 但是速度很慢的 最快的备份方法当然是直接把数据目录copy一份了 但是一般来说 都要关闭 MySQL的服务才能做 不然在你copy的时候刚好还有人读写表那麻烦就大了 这次朋友介绍我使用mysqlhotcopy 就相当于上面 不过他可以热备份 他备份非常快 我测试一个 G的mysql他备份的时间在 分钟内完成
下面是它的介绍
mysqlhotcopy是一个Perl脚本 最初由Tim Bunce编写并提供 它使用LOCK TABLES FLUSH TABLES和cp或scp来快速备份数据库 它是备份数据库或单个表的最快的途径 但它只能运行在数据库目录所在的机器上 mysqlhotcopy只用于备份MyISAM 它运行在Unix和NetWare中
使用方法见下面的脚本 加入crotab中吧
#!/bin/sh # Name:mysqlbackup sh # PS:MySQL DataBase Backup Use mysqlhotcopy script # Last Modify: # 定义变量 请根据具体情况修改 # 定义脚本所在目录 scriptsDir=`pwd`
# 数据库的数据目录 dataDir=/var/lib/mysql
# 数据备份目录 tmpBackupDir=/tmp/mysqlblackup backupDir=/backup/mysql
# 用来备份数据库的用户名和密码 mysqlUser=root mysqlPWD= you password
# 如果临时备份目录存在 清空它 如果不存在则创建它 if [[ e $tmpBackupDir ]]then rm rf $tmpBackupDir/* else mkdir $tmpBackupDir fi
# 如果备份目录不存在则创建它 if [[ ! e $backupDir ]]then mkdir $backupDir fi
# 得到数据库备份列表 在此可以过滤不想备份的数据库 for databases in `find $dataDir type d | \ sed e s/\/var\/lib\/mysql\/// | \ sed e s/test// `do if [[ $databases == ]]then continue else
# 备份数据库 /usr/bin/mysqlhotcopy user=$mysqlUser password=$mysqlPWD q $databases $tmpBackupDir dateTime=`date +%Y %m %d %H:%M:%S ` echo $dateTime Database:$databases backup success! >>MySQLBackup log fi done
# 压缩备份文件 date=`date I` cd $tmpBackupDir tar czf $backupDir/mysql $date tar gz /
#End完成
加入到crontab中设置每周 运行 * * /backup/blackup sh
注意:恢复数据库到备份时的状态
mysqlhotcopy 备份出来的是整个数据库目录 使用时可以直接拷贝到 mysqld 指定的 datadir (在这里是 /var/lib/mysql/)目录下即可 同时要注意权限的问题 如下例
shell>cp rf db_name /var/lib/mysql/
shell>chown R mysql:mysql /var/lib/mysql/ (将 db_name 目录的属主改成 mysqld 运行用户)
本套备份策略只能恢复数据库到最后一次备份时的状态 要想在崩溃时丢失的数据尽量少应该更频繁的进行备份 要想恢复数据到崩溃时的状态请使用主从复制机制(replication)
小技巧:
不想写密码在shell中的话 可以在root的home目录下建立一个f文件 以便让mysqlhotcopy从中读取用户名/密码 [mysqlhotcopy] user=root password=YourPassword 然后安全起见 chmod一下 chmod ~/f
附:mysqlhotcopy常用参数
· allowold 如果目标存在不放弃(加上一个_old后缀重新命名它) · checkpoint=db_name tbl_name 在指定的db_name tbl_name插入检查点条目 · debug 启用调试输出 · dryrun n 报告动作而不执行它们 · flushlog 所有表锁定后刷新日志 · keepold 完成后不删除以前(重新命名的)的目标 · method=mand 复制方法(cp或scp) · noindices 备份中不包括全部索引文件 这样使备份更小 更快 可以在以后用myisamc rq重新构建索引 · password=password p password 当连接服务器时使用的密码 请注意该选项的密码值是不可选的 不象其它MySQL程序 · port=port_num P port_num 当连接本地服务器时使用的TCP/IP端口号 · quiet q 除了出现错误时保持沉默 · regexp=expr 复制所有数据库名匹配给出的正则表达式的数据库 · socket=path S path 用于连接的Unix套接字文件 · suffix=str 所复制的数据库名的后缀 · tmpdir=path 临时目录(代替/tmp) · user=user_name u user_name 当连接服务器时使用的MySQL用户名
lishixinzhi/Article/program/MySQL/201311/29401mysql备份用自带的备份工具mysqldump
每天自动执行用cron工具,把mysql的备份命令放在.sh文件里面
.sh文件放在/etc/cron.daily目录,就会每天自动执行了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)