加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL备份与还原几种实用方法汇总

发布时间:2022-06-29 20:18:02 所属栏目:MySql教程 来源:互联网
导读:MySQL备份可是方法众多了我相信各位朋友都会根据自己每一个网站不同情况来进行 MySQL备份了,下面我今天给各位整理常用的MySQL备份例子. 总结下几种常用的mysql备份方法: 一、直接拷贝数据库文件 首先把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷
  MySQL备份可是方法众多了我相信各位朋友都会根据自己每一个网站不同情况来进行 MySQL备份了,下面我今天给各位整理常用的MySQL备份例子.
 
  总结下几种常用的mysql备份方法:
 
  一、直接拷贝数据库文件
 
  首先把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷贝过程中不会有新的数据写入:
 
  mysql>FLUSH TABLES WITH READ LOCK;
 
  使用tar或cp等命令备份数据库文件,这里使用tar:
 
  tar zcvf /backup/mysql_$(date "+%Y%m%d").tar.gz /var/lib/mysql
 
  c、备份完后解锁数据表
 
  mysql> unlock tables;
 
  这种方法备份出来的数据恢复也很简单,直接拷贝回原来的数据库目录下即可。需要注意,对于 Innodb 类型表来说,还需要备份其日志文件,即 ib_logfile* 文件。因为当 Innodb 表损坏时,就可以依靠这些日志文件来恢复。
 
  二、 使用mysqlhotcopy备份
 
  mysqlhotcopy 是一个 PERL 程序,使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 来快速备份数据库,它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件,包括数据表定义文件、数据文件、索引文件,所在的机器上.
 
  mysqlhotcopy 只能用于备份 MyISAM。
 
  例:把数据库test备份到/backup目录下:
 
  /usr/local/mysql/bin/mysqlhotcopy -uroot -pxxx test /backup
 
  mysqlhotcopy在执行前将会锁定数据库,执行完毕后将自动释放锁定.
 
  还原:mysqlhotcopy 备份出来的是整个数据库目录,还原时直接拷贝覆盖就行了,注意权限问题.
 
  cp -rf /backup/test /var/lib/mysql/
 
  注意,想要使用 mysqlhotcopy,必须要有 SELECT、RELOAD(要执行 FLUSH TABLES) 权限,并且还必须要能够有读取 datadir/db_name 目录的权限.
 
  三、使用主从复制机制(replication)(实现数据库实时备份)推荐.
 
  见:MySQL主从复制
 
  四、最后提供一个mysql自动备份脚本,使用mysqldump工具.
 
  #!/bin/bash
  #caishzh 20120509
  
  BAKDIR="/backup/mysql"     #mysql备份目录
  MAIL="xxx@xxx.com"          #邮箱地址
  USER="root"                         #mysql用户名
  PASSWD="jjj"                         #mysql密码
  DB="test"                              #数据库名
  DATE=$(date "+%Y%m%d")     #日期
  
  [ -d "$BAKDIR" ] || mkdir -p "$BAKDIR"     #如果备份目录不存在则创建
  --phpfensi.com
  mysqldump -opt -u$USER -p$PASSWD $DB |gzip > $BKDIR/$DB_$DATA.gz     #备份并使用gzip打包
  
  if [ $? -eq 0 ];then
       #echo "$DB mysql backup" |mutt $MAIL -a $BKDIR/$DB_$DATA.sql -s "$DB mysql backup"
       ls -lh $BAKDIR/*.gz>$BAKDIR/messages.txt
       mutt  $MAIL -a $BKDIR/$DB_$DATA.gz -s "$DATE:$DB mysql backup" < $BAKDIR/messages.txt
  else
       echo "$DATE mysql backup failed"|mail  -s "$DATE msyql bacup failed"  $MAIL
  fi。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读