您的位置:博客首页 >> Web服务器 >> MySQL数据备份

MySQL数据备份

日志编号:37 发表时间: 2013-11-03 10:30:21 关注次数:4496
发表时间:2011-12-10 22:40:26
更新时间:2013-11-03 10:30:21

编辑脚本:vi /usr/local/webroot/backup_mysql_data.sh

#!/bin/bash
# This script run at 30:03
data_path="/var/www/webroot/databack/mysql_data_"
/usr/local/webroot/mysql/bin/mysqldump --force --quick --skip-opt --create-options --add-drop-table --extended-insert --host="localhost" --port=3306 --user="root" --password="" "databasename" tablename1 tablename2 | gzip > ${data_path}$(date -d "yesterday" +"%Y_%m_%d").sql.gz


接着计划任务:
crontab -e输入:
30 03 * * *. /bin/bash /usr/local/webroot/backup_mysql_data.sh

    这样就会每天3点半在/var/www/webroot/databack/目录生成文件名如mysql_data_2011_11_10.sql.gz的数据库数据了。

    不过MySQL数据库过大的话,可以减少备份次数。最好拥有自己的服务器,拷盘。

    恢复数据:gunzip < mysql_data_2011_11_10.sql.gz | mysql -u root -p databasename
    具体命令:gunzip < /路径/mysql_data_20130209_2.sql.gz | /路径/mysql/bin/mysql -u root -p databasename
    示例:gunzip < /var/www/mysql_blog_20120427.sql.gz | /usr/local/webroot/mysql/bin/mysql -ukuhanzhu -pmima123 blog

    至于示例中的"databasename" tablename1 tablename2 表示备份datasename这个数据库下的tablename1 tablename2两个表内容,其他的不备份。你可以根据自己需要修改mysqldump的参数用法:

以下为引用内容:
备份MySQL数据库的命令
mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql

备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。
mysqldump -–add-drop-table -uusername -ppassword databasename > backupfile.sql

直接将MySQL数据库压缩备份
mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz

备份MySQL数据库某个(些)表
mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql

同时备份多个MySQL数据库
mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql

仅仅备份数据库结构
mysqldump –no-data –databases databasename1 databasename2 databasename3 > structurebackupfile.sql

备份服务器上所有数据库
mysqldump –all-databases > allbackupfile.sql

还原MySQL数据库的命令
mysql -hhostname -uusername -ppassword databasename < backupfile.sql

还原压缩的MySQL数据库
gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename

将数据库转移到新服务器
mysqldump -uusername -ppassword databasename | mysql –host=*.*.*.* -C databasename


对于虚拟主机,建议你使用Navicat的ntunnel_mysql.php进行备份:http://www.flashgou.com/show/47

    如果是MyISAM表(比如DZ论坛)就更简单了,直接复制data目录下的数据库名即可:cp -rf /usr/local/mysql/data/flashgou /var/www/ 这样就可以在var/www目录下找到flashgou,打包方便下载:tar -zcvf /var/www/flashgou.tar.gz /var/www/flashgou

    对于数据量巨大的论坛而言,复制备份是最简单可靠的。我一日IP 5000的论坛,数据库有2G(目前已到8G,压缩打包tar.gz后还有600M),使用mysqldump和DZ自带的分卷备份功能都会导致MySQL server has gone away数据库崩溃的情况(VPS嘛,性能跟服务器没法比),而且等待时间太长,还烦琐。主从备份什么的又没必要(论坛没什么收入)。

    恢复时将flashgou.tar.gz解压放到原目录(mysql/data下),chown设置下用户组就可以了。这对于转移空间(从一个VPS转移到另一VPS)尤其方便。
接着再用phpmyadmin点击表明,提示表坏了读不了的,可以在命令行使用myisamchk -r -f /usr/local/mysql/var/bbs/pre_home_feed.MYI(举例表名)修复。

    另外MyISAM表备份还可以使用mysqlhotcopy进行备份:/usr/local/mysql/bin/mysqlhotcopy -u root -p Zmh537817 --addtodest 数据库名1 数据库名2 /var/www,使用mysqlhotcopy需要先安装perl-DBI和DBD-mysql,具体可以再搜索查看资料。

目前我对那个5000IP论坛的备份脚本是:
cp -rf /usr/local/webroot/mysql/dzbbs /var/www/
tar -zcvf /var/www/logs/databack/mysql_bbs_$(date -d "yesterday" +"%Y%m%d").tar.gz /var/www/dzbbs
rm -rf /var/www/dzbbs
chown -R myweb.wwwroot /var/www/logs/databack/


注:将目录下的文件移动到上层目录:
mv /usr/local/mysql/var/SHMcfyKhIqhF/* /usr/local/mysql/var/
本站不提供讨论功能。
本站所有非新闻类文章均为原创,且禁止转载。
本站为了获得更多流量赚取广告费,难免会有以次充好的文章,望见谅,勿鄙视。