mysql 怎么备份日志,windoes环境下。求解 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 为什么要备份日志呢,直接备份增量数据不就好了么,用xtranbackup 工具备份吧! 请参考 http://www.banping.com/2011/04/14/xtrabackup-mysql55/http://space.itpub.net/index.php?action/viewspace/itemid/691835这个里面,应该可以解决你的问题! 上次不是有在DOS下备份的BAT吗,直接运行就可以备份数据库了 那直接用 mysql workbench啊!不就搞定了么? 给你一个实例:17:44:37 Dumping test (tmd_3, tmp_excel_data_1, ac_bak_old, rkdbak, ac)Running: mysqldump.exe --defaults-extra-file="c:\docume~1\skyman.man\locals~1\temp\tmpx9y9bv.cnf" --no-create-info=FALSE --order-by-primary=FALSE --force=FALSE --no-data=FALSE --tz-utc=TRUE --flush-privileges=FALSE --compress=FALSE --replace=FALSE --host=192.168.0.39 --insert-ignore=FALSE --extended-insert=TRUE --user=skyman.man --quote-names=TRUE --hex-blob=FALSE --complete-insert=FALSE --add-locks=TRUE --port=3306 --disable-keys=TRUE --delayed-insert=FALSE --create-options=TRUE --delete-master-logs=FALSE --comments=TRUE --default-character-set=utf8 --max_allowed_packet=1G --flush-logs=FALSE --dump-date=TRUE --lock-tables=TRUE --allow-keywords=FALSE --events=FALSE "test" "tmd_3" "tmp_excel_data_1" "ac_bak_old" "rkdbak" "ac"17:44:38 Dumping trac (attachment)Running: mysqldump.exe --defaults-extra-file="c:\docume~1\skyman.man\locals~1\temp\tmpvsiysa.cnf" --no-create-info=FALSE --order-by-primary=FALSE --force=FALSE --no-data=FALSE --tz-utc=TRUE --flush-privileges=FALSE --compress=FALSE --replace=FALSE --host=192.168.0.39 --insert-ignore=FALSE --extended-insert=TRUE --user=skyman.man --quote-names=TRUE --hex-blob=FALSE --complete-insert=FALSE --add-locks=TRUE --port=3306 --disable-keys=TRUE --delayed-insert=FALSE --create-options=TRUE --delete-master-logs=FALSE --comments=TRUE --default-character-set=utf8 --max_allowed_packet=1G --flush-logs=FALSE --dump-date=TRUE --lock-tables=TRUE --allow-keywords=FALSE --events=FALSE "trac" "attachment"17:44:38 Dumping zhongliang1 (ecs_order_info)Running: mysqldump.exe --defaults-extra-file="c:\docume~1\skyman.man\locals~1\temp\tmprhgk6p.cnf" --no-create-info=FALSE --order-by-primary=FALSE --force=FALSE --no-data=FALSE --tz-utc=TRUE --flush-privileges=FALSE --compress=FALSE --replace=FALSE --host=192.168.0.39 --insert-ignore=FALSE --extended-insert=TRUE --user=skyman.man --quote-names=TRUE --hex-blob=FALSE --complete-insert=FALSE --add-locks=TRUE --port=3306 --disable-keys=TRUE --delayed-insert=FALSE --create-options=TRUE --delete-master-logs=FALSE --comments=TRUE --default-character-set=utf8 --max_allowed_packet=1G --flush-logs=FALSE --dump-date=TRUE --lock-tables=TRUE --allow-keywords=FALSE --events=FALSE "zhongliang1" "ecs_order_info"17:44:38 Export of C:\Documents and Settings\Skyman.Man\My Documents\dumps\Dump20110831.sql has finished自己提取提取,windows下的脚本,我还真的不怎么会写的。 还是用 mysqldump 吗? 可以用mysqldump或者开源工具innodbbackup 备份策略三、使用mysqldump备份数据库mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。mysqldump 比直接拷贝要慢些。关于mysqldump的更详细解释见最后的附录。对于中等级别业务量的系统来说,备份策略可以这么定:第一次完全备份,每天一次增量备份,每周再做一次完全备份,如此一直重复。而对于重要的且繁忙的系统来说,则可能需要每天一次全量备份,每小时一次增量备份,甚至更频繁。为了不影响线上业务,实现在线备份,并且能增量备份,最好的办法就是采用主从复制机制(replication),在 slave 机器上做备份。备份策略布置:(1)、创建备份目录Shell> mkdir /tmp/mysqlbackupShell> mkdir /tmp/mysqlbackup/daily(2)、启用二进制日志采用 binlog 的方法相对来说更灵活,省心省力,而且还可以支持增量备份。启用 binlog 时必须要重启 mysqld。首先,关闭 mysqld,打开 /etc/my.cnf,加入以下几行:[mysqld]log-bin然后启动 mysqld 就可以了。运行过程中会产生 HOSTNAME-bin.000001 以及 HOSTNAME-bin.index,前面的文件是 mysqld 记录所有对数据的更新操作,后面的文件则是所有 binlog 的索引,都不能轻易删除。关于 binlog 的更详细信息请查看手册。(3)、配置SSH密钥登录,用于将MySQL备份传送到备份服务器(如果备份服务器为Windows,请跳过此部)。1)、在MySQL所在服务器(192.168.0.20)生成SSH密钥[root@lab ~]# ssh-keygen -t rsaGenerating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa): //直接回车Enter passphrase (empty for no passphrase): //直接回车,不使用密码Enter same passphrase again: //直接回车,不使用密码Your identification has been saved in /root/.ssh/id_rsa.Your public key has been saved in /root/.ssh/id_rsa.pub.The key fingerprint is:c2:96:9f:2d:5a:8e:08:42:43:35:2f:85:5e:72:f8:1c root@lab2)、在备份服务器(192.168.0.200)上创建目录,修改权限,并传送公钥。[root@lab ~]# ssh 192.168.0.200 "mkdir .ssh;chmod 0700 .ssh"The authenticity of host '192.168.0.200 (192.168.0.200)' can't be established.RSA key fingerprint is 37:57:55:c1:32:f1:dd:bb:1b:8a:13:6f:89:fb:b8:9d.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '192.168.0.200' (RSA) to the list of known hosts.[email protected]'s password: //输入备份服务器的root密码[root@lab ~]# scp .ssh/id_rsa.pub 192.168.0.200:.ssh/authorized_keys2[email protected]'s password: id_rsa.pub 100% 218 0.2KB/s 00:00 3)、测试SSH登录[root@lab ~]# ssh 192.168.0.200 //测试SSH登录Last login: Fri Nov 16 10:34:02 2007 from 192.168.0.20[root@lib ~]# (4)、设置crontab任务,每天执行备份脚本shell> crontab -e#每个星期日凌晨3:00执行完全备份脚本0 3 * * 0 /root/MySQLBackup/mysqlFullBackup.sh >/dev/null 2>&1#周一到周六凌晨3:00做增量备份0 3 * * 1-6 /root/MySQLBackup/mysqlDailyBackup.sh >/dev/null 2>&1mysqlFullBackup.sh注释:#!/bin/sh# Name:mysqlFullBackup.sh# PS:MySQL DataBase Full Backup.# Write by:i.Stone# Last Modify:2007-11-17## Use mysqldump --help get more detail.## 定义变量,请根据具体情况修改# 定义脚本目录scriptsDir=`pwd`# 定义数据库目录mysqlDir=/usr/local/mysql# 定义用于备份数据库的用户名和密码user=rootuserPWD=111111# 定义备份目录dataBackupDir=/tmp/mysqlbackup# 定义邮件正文文件eMailFile=$dataBackupDir/email.txt# 定义邮件地址[email protected]# 定义备份日志文件logFile=$dataBackupDir/mysqlbackup.logDATE=`date -I`echo "" > $eMailFileecho $(date +"%y-%m-%d %H:%M:%S">> $eMailFilecd $dataBackupDir# 定义备份文件名dumpFile=mysql_$DATE.sqlGZDumpFile=mysql_$DATE.sql.tar.gz# 使用mysqldump备份数据库,请根据具体情况设置参数$mysqlDir/bin/mysqldump -u$user -p$userPWD \--opt --default-character-set=utf8 --extended-insert=false \--triggers -R --hex-blob --all-databases \--flush-logs --delete-master-logs \--delete-master-logs \-x > $dumpFile# 压缩备份文件if [[ $? == 0 ]]; thentar czf $GZDumpFile $dumpFile >> $eMailFile 2>&1echo "BackupFileName:$GZDumpFile" >> $eMailFileecho "DataBase Backup Success!" >> $eMailFilerm -f $dumpFile# Delete daily backup files.cd $dataBackupDir/dailyrm -f *# Delete old backup files(mtime>2).$scriptsDir/rmBackup.sh# 如果不需要将备份传送到备份服务器或备份服务器为Windows,请将标绿的行注释掉# Move Backup Files To Backup Server.#适合Linux(MySQL服务器)到Linux(备份服务器)$scriptsDir/rsyncBackup.shif (( !$? )); then echo "Move Backup Files To Backup Server Success!" >> $eMailFile else echo "Move Backup Files To Backup Server Fail!" >> $eMailFile fielseecho "DataBase Backup Fail!" >> $emailFilefi# 写日志文件echo "--------------------------------------------------------" >> $logFilecat $eMailFile >> $logFile# 发送邮件通知cat $eMailFile | mail -s "MySQL Backup" $eMail(5) 、恢复数据库到备份时的状态用 mysqldump 备份出来的文件是一个可以直接倒入的 SQL 脚本,直接用 mysql 客户端导入就可以了。/usr/local/mysql/bin/mysql -uroot -pUserPWD db_name < db_name.sql对于任何可适用的更新日志,将它们作为 mysql 的输入: % ls -t -r -1 HOSTNAME-bin* | xargs mysqlbinlog | mysql -uUser -pUserPWD ls 命令生成更新日志文件的一个单列列表,根据服务器产生它们的次序排序(注意:如果你修改任何一个文件,你将改变排序次序,这将导致更新日志以错误的次序被运用。)本套备份策略只能恢复数据库到最后一次备份时的状态,要想在崩溃时丢失的数据尽量少应该更频繁的进行备份,要想恢复数据到崩溃时的状态请使用主从复制机制(replication)。如果使用本套备份脚本,将日志文件和数据文件放到不同的磁盘上是一个不错的主义,这样不仅可以提高数据写入速度,还能使数据更安全。 打开你的二进制日志功能,然后每小时把新的BINLOG文件复制一下。每天,或者每击做一次MYSQLDUMP。 将mysqldump语句写入到cmd文件,使用计划任务各个小时执行一次 mysql中创建trigger竟然失败 求sql 这个考勤如何统计 求助:mysql proxy问题 关于linux平台下的mysql 怎样取得插入记录的ID,ID是用Auto Increment的 error1045 请教一个sql语句 请问mysql-installer-web-community的mysq和mysql-installer-communityl的版本的区别,谢谢。 在mysql里如何添加一列??? Column count doesn't match value count at row 1 SQL 有个关于 update 正则替换的问题请教!谢谢解答
为什么要备份日志呢,直接备份增量数据不就好了么,用xtranbackup 工具备份吧!
请参考 http://www.banping.com/2011/04/14/xtrabackup-mysql55/http://space.itpub.net/index.php?action/viewspace/itemid/691835
这个里面,应该可以解决你的问题!
那直接用 mysql workbench啊!不就搞定了么?
给你一个实例:
17:44:37 Dumping test (tmd_3, tmp_excel_data_1, ac_bak_old, rkdbak, ac)
Running: mysqldump.exe --defaults-extra-file="c:\docume~1\skyman.man\locals~1\temp\tmpx9y9bv.cnf" --no-create-info=FALSE --order-by-primary=FALSE --force=FALSE
--no-data=FALSE --tz-utc=TRUE --flush-privileges=FALSE --compress=FALSE --replace=FALSE --host=192.168.0.39 --insert-ignore=FALSE --extended-insert=TRUE
--user=skyman.man --quote-names=TRUE --hex-blob=FALSE --complete-insert=FALSE --add-locks=TRUE --port=3306 --disable-keys=TRUE --delayed-insert=FALSE
--create-options=TRUE --delete-master-logs=FALSE --comments=TRUE --default-character-set=utf8 --max_allowed_packet=1G --flush-logs=FALSE --dump-date=TRUE
--lock-tables=TRUE --allow-keywords=FALSE --events=FALSE "test" "tmd_3" "tmp_excel_data_1" "ac_bak_old" "rkdbak" "ac"
17:44:38 Dumping trac (attachment)
Running: mysqldump.exe --defaults-extra-file="c:\docume~1\skyman.man\locals~1\temp\tmpvsiysa.cnf" --no-create-info=FALSE --order-by-primary=FALSE
--force=FALSE --no-data=FALSE --tz-utc=TRUE --flush-privileges=FALSE --compress=FALSE --replace=FALSE --host=192.168.0.39 --insert-ignore=FALSE
--extended-insert=TRUE --user=skyman.man --quote-names=TRUE --hex-blob=FALSE --complete-insert=FALSE --add-locks=TRUE --port=3306 --disable-keys=TRUE
--delayed-insert=FALSE --create-options=TRUE --delete-master-logs=FALSE --comments=TRUE --default-character-set=utf8 --max_allowed_packet=1G --flush-logs=FALSE
--dump-date=TRUE --lock-tables=TRUE --allow-keywords=FALSE --events=FALSE "trac" "attachment"
17:44:38 Dumping zhongliang1 (ecs_order_info)
Running: mysqldump.exe --defaults-extra-file="c:\docume~1\skyman.man\locals~1\temp\tmprhgk6p.cnf" --no-create-info=FALSE --order-by-primary=FALSE
--force=FALSE --no-data=FALSE --tz-utc=TRUE --flush-privileges=FALSE --compress=FALSE --replace=FALSE --host=192.168.0.39 --insert-ignore=FALSE
--extended-insert=TRUE --user=skyman.man --quote-names=TRUE --hex-blob=FALSE --complete-insert=FALSE --add-locks=TRUE --port=3306 --disable-keys=TRUE
--delayed-insert=FALSE --create-options=TRUE --delete-master-logs=FALSE --comments=TRUE --default-character-set=utf8 --max_allowed_packet=1G
--flush-logs=FALSE --dump-date=TRUE --lock-tables=TRUE --allow-keywords=FALSE --events=FALSE "zhongliang1" "ecs_order_info"
17:44:38 Export of C:\Documents and Settings\Skyman.Man\My Documents\dumps\Dump20110831.sql has finished
自己提取提取,windows下的脚本,我还真的不怎么会写的。
或者开源工具innodbbackup
备份策略布置:(1)、创建备份目录Shell> mkdir /tmp/mysqlbackupShell> mkdir /tmp/mysqlbackup/daily(2)、启用二进制日志采用 binlog 的方法相对来说更灵活,省心省力,而且还可以支持增量备份。
启用 binlog 时必须要重启 mysqld。首先,关闭 mysqld,打开 /etc/my.cnf,加入以下几行:
[mysqld]
log-bin
然后启动 mysqld 就可以了。运行过程中会产生 HOSTNAME-bin.000001 以及 HOSTNAME-bin.index,前面的文件是 mysqld 记录所有对数据的更新操作,后面的文件则是所有 binlog 的索引,都不能轻易删除。关于 binlog 的更详细信息请查看手册。(3)、配置SSH密钥登录,用于将MySQL备份传送到备份服务器(如果备份服务器为Windows,请跳过此部)。1)、在MySQL所在服务器(192.168.0.20)生成SSH密钥[root@lab ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
//直接回车
Enter passphrase (empty for no passphrase):
//直接回车,不使用密码
Enter same passphrase again:
//直接回车,不使用密码
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
c2:96:9f:2d:5a:8e:08:42:43:35:2f:85:5e:72:f8:1c root@lab2)、在备份服务器(192.168.0.200)上创建目录,修改权限,并传送公钥。
[root@lab ~]# ssh 192.168.0.200 "mkdir .ssh;chmod 0700 .ssh"
The authenticity of host '192.168.0.200 (192.168.0.200)' can't be established.
RSA key fingerprint is 37:57:55:c1:32:f1:dd:bb:1b:8a:13:6f:89:fb:b8:9d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.200' (RSA) to the list of known hosts.
[email protected]'s password:
//输入备份服务器的root密码
[root@lab ~]# scp .ssh/id_rsa.pub 192.168.0.200:.ssh/authorized_keys2
[email protected]'s password:
id_rsa.pub 100% 218 0.2KB/s 00:00
3)、测试SSH登录
[root@lab ~]# ssh 192.168.0.200 //测试SSH登录
Last login: Fri Nov 16 10:34:02 2007 from 192.168.0.20
[root@lib ~]# (4)、设置crontab任务,每天执行备份脚本shell> crontab -e#每个星期日凌晨3:00执行完全备份脚本0 3 * * 0 /root/MySQLBackup/mysqlFullBackup.sh >/dev/null 2>&1#周一到周六凌晨3:00做增量备份0 3 * * 1-6 /root/MySQLBackup/mysqlDailyBackup.sh >/dev/null 2>&1
mysqlFullBackup.sh注释:#!/bin/sh# Name:mysqlFullBackup.sh# PS:MySQL DataBase Full Backup.# Write by:i.Stone# Last Modify:2007-11-17## Use mysqldump --help get more detail.## 定义变量,请根据具体情况修改# 定义脚本目录scriptsDir=`pwd`# 定义数据库目录mysqlDir=/usr/local/mysql# 定义用于备份数据库的用户名和密码user=rootuserPWD=111111# 定义备份目录dataBackupDir=/tmp/mysqlbackup# 定义邮件正文文件eMailFile=$dataBackupDir/email.txt# 定义邮件地址[email protected]# 定义备份日志文件logFile=$dataBackupDir/mysqlbackup.logDATE=`date -I`
echo "" > $eMailFileecho $(date +"%y-%m-%d %H:%M:%S">> $eMailFilecd $dataBackupDir# 定义备份文件名dumpFile=mysql_$DATE.sqlGZDumpFile=mysql_$DATE.sql.tar.gz
# 使用mysqldump备份数据库,请根据具体情况设置参数$mysqlDir/bin/mysqldump -u$user -p$userPWD \--opt --default-character-set=utf8 --extended-insert=false \--triggers -R --hex-blob --all-databases \--flush-logs --delete-master-logs \--delete-master-logs \-x > $dumpFile
# 压缩备份文件if [[ $? == 0 ]]; then
tar czf $GZDumpFile $dumpFile >> $eMailFile 2>&1
echo "BackupFileName:$GZDumpFile" >> $eMailFile
echo "DataBase Backup Success!" >> $eMailFile
rm -f $dumpFile
# Delete daily backup files.
cd $dataBackupDir/daily
rm -f *
# Delete old backup files(mtime>2).
$scriptsDir/rmBackup.sh
# 如果不需要将备份传送到备份服务器或备份服务器为Windows,请将标绿的行注释掉# Move Backup Files To Backup Server.#适合Linux(MySQL服务器)到Linux(备份服务器)
$scriptsDir/rsyncBackup.sh
if (( !$? )); then echo "Move Backup Files To Backup Server Success!" >> $eMailFile else echo "Move Backup Files To Backup Server Fail!" >> $eMailFile fi
else
echo "DataBase Backup Fail!" >> $emailFilefi# 写日志文件echo "--------------------------------------------------------" >> $logFilecat $eMailFile >> $logFile# 发送邮件通知cat $eMailFile | mail -s "MySQL Backup" $eMail(5) 、恢复数据库到备份时的状态用 mysqldump 备份出来的文件是一个可以直接倒入的 SQL 脚本,直接用 mysql 客户端导入就可以了。/usr/local/mysql/bin/mysql -uroot -pUserPWD db_name < db_name.sql
对于任何可适用的更新日志,将它们作为 mysql 的输入:
% ls -t -r -1 HOSTNAME-bin* | xargs mysqlbinlog | mysql -uUser -pUserPWD
ls 命令生成更新日志文件的一个单列列表,根据服务器产生它们的次序排序(注意:如果你修改任何一个文件,你将改变排序次序,这将导致更新日志以错误的次序被运用。)本套备份策略只能恢复数据库到最后一次备份时的状态,要想在崩溃时丢失的数据尽量少应该更频繁的进行备份,要想恢复数据到崩溃时的状态请使用主从复制机制(replication)。如果使用本套备份脚本,将日志文件和数据文件放到不同的磁盘上是一个不错的主义,这样不仅可以提高数据写入速度,还能使数据更安全。