MySQL备份与恢复(PDF版)
MySQL备份与恢复(PDF版)
MySQL备份与恢复(PDF版)下面文章摘录的主题:mysql日志文件,使用mysqld加相应选项来启用某种日志。
Mysql 完全备份及恢复:mysqldump对MyISAM或InnoDB完全备份,mysqlhotcopy对MyISAM完全备份。
增量备份:使用二进制日志增量备份,使用mysqlbinlog命令恢复二进制日志。
SQL语法备份及恢复。
拷贝数据文件备份(对Innodb还需拷贝日志文件)。
MyISAM表的检查与修复(另见《MySql存储引擎》)。
Innodb表的碎片整理和模糊检查点。
MySQL备份和恢复作/译者:叶金荣本文讨论MySQL的备份和恢复机制,以及如何维护数据表,包括最主要的两种表类型:MyISAM和Innodb,文中设计的MySQL版本为 5.0.22。
目前MySQL支持的免费备份工具有:mysqldump、mysqlhotcopy,还可以用SQL语法进行备份:BACKUP TABLE或者SELECT INTO OUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文件和相关的配置文件。
MyISAM表是保存成文件的形式,因此相对比较容易备份,上面提到的几种方法都可以使用。
Innodb所有的表都保存在同一个数据文件ibdata1中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,免费的方案可以是拷贝数据文件、备份binlog,或者用mysqldump。
1、mysqldump1.1备份mysqldump是采用SQL级别的备份机制,它将数据表导成SQL 脚本文件,在不同的MySQL版本之间升级时相对比较合适,这也是最常用的备份方法。
现在来讲一下mysqldump的一些主要参数:1.--compatible=name它告诉mysqldump,导出的数据将和哪种数据库或哪个旧版本的MySQL服务器相兼容。
值可以为ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options等,要使用几个值,用逗号将它们隔开。
MySQL数据库备份和恢复教程
MySQL数据库备份和恢复教程引言MySQL是一种开源的关系型数据库管理系统,被广泛应用于各种Web应用程序和服务器端开发中。
作为一种数据库管理系统,备份和恢复是非常重要的环节。
本文将为您讲解MySQL数据库备份和恢复的方法和步骤,以帮助您保护和恢复数据库中的重要数据。
一、MySQL数据库备份方法1. 手动备份手动备份是最简单的备份方法之一。
您只需要登录到MySQL服务器,使用命令行或者图形界面工具,执行相应的备份命令即可。
以下是手动备份的步骤:步骤一:登录到MySQL服务器您可以使用命令行工具,如MySQL命令行客户端或者PuTTY等,输入相应的主机名、用户名和密码。
例如:```mysql -h localhost -u root -p```步骤二:选择要备份的数据库使用以下命令选择要备份的数据库:```use database_name;```步骤三:执行备份命令使用以下命令执行备份:```mysqldump -h localhost -u root -p database_name > backup_file.sql```这将把数据库的数据和结构导出到一个名为backup_file.sql的文件中。
2. 自动备份手动备份虽然简单,但是可能会忘记执行备份操作,因此自动备份是更为常见的备份方式。
以下是几种自动备份的常见方法:a. Shell脚本您可以编写一个Shell脚本来定期执行备份操作。
脚本可以使用crontab等工具来设置定时任务,例如每天凌晨执行一次备份操作。
以下是一个使用Shell脚本的备份示例:```#!/bin/bashmysqldump -h localhost -u root -p database_name > /path/to/backup_file.sql```您可以将这个脚本保存为backup.sh,并通过crontab设置每天凌晨执行:```0 0 * * * /bin/bash /path/to/backup.sh```b. MySQL事件MySQL还提供了事件功能,可以定时执行一些SQL语句,包括备份命令。
第六章 MYSQL备份与恢复
MYSQL安装后默认仅启动错误日志(且不能被禁止),其它日志则需要通过配 安装后默认仅启动错误日志(且不能被禁止),其它日志则需要通过配 安装后默认仅启动错误日志 ), 置服务器来启动。 的日志文件一般放在默认的数据目录中( )。默 置服务器来启动。MYSQL的日志文件一般放在默认的数据目录中(datadir)。默 的日志文件一般放在默认的数据目录中 )。 认数据目录通过查看配置文件my.ini进行查看。 进行查看。 认数据目录通过查看配置文件 进行查看
第8页 页
★数据库技术与应用★ 数据库技术与应用★
MYSQL备份与恢复 第六章 MYSQL备份与恢复
MYSQL日志小结 MYSQL日志小结
日志文件 错误日志 记入文件中的信息类型 记录启动、运行或停止mysqld时出现的问题。 mysqld时出现的问题 记录启动、运行或停止mysqld时出现的问题。
第2页 页
★数据库技术与应用★ 数据库技术与应用★
MYSQL备份与恢复 第六章 MYSQL备份与恢复
MYSQL日志概述 MYSQL日志概述
MySQL日志记录了数据库工作的各种信息, MySQL日志记录了数据库工作的各种信息,以帮助数据库管理 日志记录了数据库工作的各种信息 员追踪数据库曾经发生过的各种事件, 员追踪数据库曾经发生过的各种事件,从而实现对数据库系统的各 种维护和优化。MYSQL日志类型如下表所示 日志类型如下表所示: 种维护和优化。MYSQL日志类型如下表所示:
1.2.6 ٭备份/恢复策略 备份/ 2.2.6 ٭逻辑备份和恢复 3.2.6 ٭物理备份和恢复 4.2.6 ٭表的导入导出
第10页 页
★数据库技术与应用★ 数据库技术与应用★
MYSQL备份与恢复 第六章 MYSQL备份与恢复
MySQL备份与恢复
MySQL备份与恢复xtrabackup2011-12-071.1 MySQL Workbeach备份•原理:采用mysql自带的mysqldump工具来实现。
•可以在服务器上用mysqldump –help来查看其所有参数。
•优点:简洁方便灵活快捷快捷。
•缺点:在大数据量的时候,效率很低。
汇报的标题写这里。
可以开始做汇报了。
前途无量的邦购2.1 Xtrabackup开源工具•支持在线热备与恢复•大数据量的时候,备份恢复都比较快快•支持复制模式下的从机备份恢复备份恢复•缺点:在增量备份的时候,作为备份基础的全备文件不能压缩,否则备份失效;增量的时候,表结构变更的话,变更部分备份无效。
•安装rpm版本•rpm -ivh xtrabackup-1.6-245.rhel5.x86_64.rpm2.2 压缩备份与解压•备份:innobackupex --user=root --port=3306 --defaults-file=/etc/f --no-lock --socket=/data/mbdata/open/mysql.sock --stream=tar /root/backup/full | gzip1>/root/backup/full/alldb.tar.gz (20G 2个小时)•解压缩:[root@localhost ~]# tar -izxvf alldb.tar.gz -C backup ( 25分钟)2.3 恢复•先停止数据库service mysqld stop;•(1):innobackupex --apply-log --user=root --defaults-file=/etc/f --no-lock /root/backup •(2):备份并删除原目录/open/mbdata/open/下所有文件•(3):innobackupex --copy-back --user=root --defaults-file=/etc/f --no-lock /root/backup •(4):chown -R mysql:mysql /data/mbdata/open •(5):service mysqld start;2.4 增量备份•必须要有未压缩的全量备份文件目录•(1):全量备份,innobackupex --user=root --port=3306 --defaults-file=/etc/f --slave-info --socket=/data/mbdata/open/mysql.sock/root/backup/full•(2):在全量备份完毕之后,对test库的表t1添加一条记录,新增加表test.t2;•(3):然后进行增量备份,innobackupex --defaults-file=/etc/f --no-timestamp --socket=/data/mbdata/open/mysql.sock --user=root --incremental --incremental-basedir=/root/backup/full /root/backup/daily2.5 增量恢复(1)•先全量恢复,然后增量恢复•对test库的数据test.t1删除掉前面新增加的数据,然后在test.t2表上面新加一个字段。
MySQL备份与恢复
MySQL的备份与恢复一、MySQL的备份:MySQL通过在全量备份基础上保证完整的二进制日志文件来达到增量备份的目的。
因此MySQL实现增量备份主要有以下几个步骤:1.开启二进制日志(bin-log):mysql默认没有启二进制日志。
首先我们需要在my.ini中修改参数:在[mysqld]下添加:log-bin=log-bin这是设置开启二进制日志的参数,日志名为log-bin.index和log-bin.000001等。
默认路径为:MySQL安装目录\data。
expire_logs_day=7这是设置二进制日志过期时间的参数。
目前二进制日志在flush log时自动删除7天之前的日志。
然后重启MySQL服务。
可以在E:\MySQL Server5.5\data目录下看到“log-bin.数字编号”的文件,如log-bin.000001。
以后每次flush log时都会从当前时间开始生成新的log-bin,文件名中的数字编号依次递增。
2.MySQL的自动全量备份:这里使用mysqldump备份数据库。
mysqldump是MySQL用于转存储数据库的实用程序。
它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令,在不同的MySQL版本之间升级时相对比较合适,这也是最常用的备份方法。
这里编写了一个批处理程序,通过任务计划定时运行来完成自动备份功能。
代码如下:MySQLBackup.bat:@echo offtitle "数据库备份程序"set MYSQLPATH=E:\"MySQL Server5.5"set DT=%date:~0,4%-%date:~5,2%-%date:~8,2% //获得当前日期if %time:~0,2% leq 9 (set hour=0%time:~1,1%) else (set hour=%time:~0,2%)//小时数前自动添0 set TM=%hour%-%time:~3,2%-%time:~6,2% //获得当前时间set USERNAME=rootset PASSWORD=google //数据库用户名和密码@echo onmkdir E:\iqe_data_backup //数据库备份的保存目录%MYSQLPATH%\bin\mysqladmin -u%USERNAME% -p%PASSWORD% flush-logs//重写日志(新建日志文件储存当前时间之后的日志,其文件名的编号自动增加)//同时删除7天前的日志%MYSQLPATH%\bin\mysqldump -u%USERNAME% iqe -p%PASSWORD% >E:\iqe_data_backup\"%DT%_%TM%_iqe".sql//备份数据库到目标路径,其文件名形式为“日期_时间_iqe.sql”目前数据库比较小,大小157M,备份时间6s。
MySQL 数据库基础与应用 第11章 备份和恢复
MySQL 数据库基础与应用
5
11.2 导出表数据和备份数据
ESCAPED BY子句用来指定转义字符,例如,“ESCAPED BY '*'”将“*”指定为转义字符,取代“\”,如空格将表示为“*N”。
● LINES子句:在LINES子句中使用TERMINATED BY指定一行 结束的标志,如“LINES TERMINATED BY '?'”表示一行以“?”作为 结束标志。
语法格式:
SELECT columnist FROM table WHERE condition INTO OUTFILE 'filename' [OPTIONS]
其中,OPTIONS的语法格式:
FIELDS TERMINATED BY 'value' FIELDS [OPTIONALLY] ENCLOSED BY 'value' FIELDS ESCAPED BY 'value' LINES STARTING BY 'value' LINES TERMINATED BY 'value'
MySQL 数据库基础与应用
6
11.2 导出表数据和备份数据
【例11.1】将sales数据库中的goods表中数据备份到指定目录: C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/,要求字段值如果是字 符就用“”””标注,字段值之间用“,”隔开,每行以“?”为结束标志。
MySQL 数据库基础与应用
3
11.2 导出表数据和备份数据
11.2.1 导出表数据
使用SELECT…INTO OUTFILE语句可以导出表数据的文本文 件。可以使用LOAD DATA INFILE语句恢复先前导出的表数据。 但SELECT…INTO OUTFILE只能导出或导入表的数据内容,而不 能导出表结构。
MySQL数据库备份与恢复
MySQL 数据库备份与恢复MySQL 数据库备份与恢复数据备份介绍在⽣产环境中我们数据库可能会遭遇各种各样的不测从⽽导致数据丢失, ⼤概分为以下⼏种.硬件故障软件故障⾃然灾害⿊客攻击误操作 (占⽐最⼤)须知在⽣产环境中,服务器的硬件坏了可以维修或者换新,软件崩溃可以修复或重新安装, 但是如果数据没了那可就毁了,⽣产环境中最重要的应该就是数据了。
所以, 为了在数据丢失之后能够恢复数据, 我们就需要定期的备份数据。
备份什么⼀般情况下, 我们需要备份的数据分为以下⼏种⼆进制⽇志, InnoDB 事务⽇志代码(存储过程、存储函数、触发器、事件调度器)服务器配置⽂件备份的类型按照备份时数据库的运⾏状态,可以分为三种,分别是:冷备、温备、热备。
、冷备:停库、停服务来备份,即当数据库进⾏备份时, 数据库不能进⾏读写操作, 即数据库要下线。
温备:不停库、不停服务来备份,会(锁表)阻⽌⽤户的写⼊,即当数据库进⾏备份时, 数据库的读操作可以执⾏, 但是不能执⾏写操作 。
热备:不停库、不停服务来备份,也不会(锁表)阻⽌⽤户的写⼊ 即当数据库进⾏备份时, 数据库的读写操作均不是受影响 。
MySQL中进⾏不同类型的备份还要考虑存储引擎是否⽀持?逻辑备份与物理备份按照备份的内容分,可以分为两种,分别是逻辑备份与物理备份1、物理备份:直接将底层物理⽂件备份2、逻辑备份:通过特定的⼯具从数据库中导出sql 语句或者数据,可能会丢失数据精度备份⽅式之全量、差异、增量按照每次备份的数据量,可以分为全量备份、差异备份以及增量备份。
全量备份/完全备份(Full Backup ):备份整个数据集( 即整个数据库 )部分备份:备份部分数据集(例如: 只备份⼀个表的变化)差异备份增量备份# 1、差异备份(Differential Backup )每次备份时,都是基于第⼀次完全备份的内容,只备份有差异的数据(新增的、修改的、删除的),例如第⼀次备份:完全备份第⼆次备份:以当前时间节点的数据为基础,备份与第⼀次备份内容的差异第三次备份:以当前时间节点的数据为基础,备份与第⼀次备份内容的差异第四次备份:以当前时间节点的数据为基础,备份与第⼀次备份内容的差异第五次备份:以当前时间节点的数据为基础,备份与第⼀次备份内容的差异。
MYSQL备份和恢复
并考虑系统可以承受的恢复时间 2.确保 mysql 打开 log-bin,mysql 才可以再必要的时候做完整恢复,或基于时间点的恢复, 或基于位置的恢复 3.要经常做备份恢复测试,确保备份是有效,并且是可以恢复的
冷备份
备份:
1.停掉 mysql 服务,再操作系统级别备份 mysql 的数据文件 2.重启 mysql 服务,备份重启以后生成的 binlog
恢复
1.方法
terminated-by=',';
mysql> load data [local] infile '/tmp/order_tab' into table order_tab fields-
2.方法
terminated-by=',';
mysqlimport -u root -p*** [--local] pointcatd order_tab.txt --fields-
单个表的备份:
备份
1.方法
from order_tab;
mysql> select * into outfile '/tmp/orader_tab' fields-terminated-by=','
2.方法
terminated-by=',';
mysqldump -u root -p*** -T /tmp pointcard orader_tab --fields-
恢复
1.停掉应用,执行 mysql 导入备份文件 mysql -u root -p**** pointcart < pointcart.sql
2.使用 mysqlbinlog 恢复自 mysqldump 备份以来的 binlog mysqlbinlog $HOME/data/mysql-bin.123456 | mysql -u root -p***
mysql备份与恢复方案
服务器备份方案一、MYSQL数据库备份与恢复:数据库本地备份:当数据量少的时候可以在每天凌晨1点-3点进行完全备份,随着数据库的增大,可以2两小时(按照需求设置时间)做增量备份与完全备份相结合的备份方式以确保数据的安全.数据库完全备份脚本:1.确定我们备份文件存放的目录这里我把所有备份文件放到/home/mysqlback2.确定需要备份的数据库,这里我们用备份d_test这个数据库来说明.dbuser="root" #定义数据库用户名dbpasswd=”123456"#定义数据库密码dbname="d_test" #定义需要备份的数据库date1=`date +%Y%m%d` #读取当前日期date2 = `date +%Y%m%d%H%M%S` #读取当前的日期时间Y年m月d日H小时M分钟S秒date3 = `date -d —5day +"%Y%m%d"` #读取当天日期之5天前的日期back = /home/mysqlback/$date1 #备份文件存放目录#判断是不是有文件存放目录如果没有则新建。
if [ ! -d $back ]thenmkdir -p $backfi#使用mysqldump命令来备份指定的数据库并且压缩成gz包。
mysqldump -u$dbuser —p$dbpasswd $dbname |gzip > $back/$dbname$date2。
sql.gz#删除指定5天前备份的过期文件以便节省磁盘空间cd /home/mysqlbackrm -rf $date3异地备份首先准备一台异地的服务器,并且搭建好vsftp(vsftp具体搭建详细步骤请参考VSFTP搭建文档)异地备份到vsftp服务器上脚本如下:数据库恢复或者重建,因为是完全备份,可以直接恢复最后一次完全备份文件.gunzip <备份。
MySQL 数据库的备份和恢复
mysql,mysqldump,导出,导出表,压缩导出mysql,mysqlhotcopy,mysql还原表本文讨论 MySQL 的备份和恢复机制,以及如何维护数据表,包括最主要的两种表类型:MyISAM和Innodb,文中设计的 MySQL 版本为 5.0.22。
目前 MySQL 支持的免费备份工具有:mysqldump、mysqlhotcopy,还可以用 SQL 语法进行备份:BACKUP TABLE或者SELECT INTO OUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文件和相关的配置文件。
MyISAM 表是保存成文件的形式,因此相对比较容易备份,上面提到的几种方法都可以使用。
Innodb所有的表都保存在同一个数据文件ibdata1中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,免费的方案可以是拷贝数据文件、备份 binlog,或者用mysqldump。
1、mysqldump1.1 备份mysqldump是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。
现在来讲一下mysqldump的一些主要参数:∙--compatible=name它告诉 mysqldump,导出的数据将和哪种数据库或哪个旧版本的 MySQL 服务器相兼容。
值可以为ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options等,要使用几个值,用逗号将它们隔开。
当然了,它并不保证能完全兼容,而是尽量兼容。
∙--complete-insert,-c导出的数据采用包含字段名的完整INSERT方式,也就是把所有的值都写在一行。
这么做能提高插入效率,但是可能会受到max_allowed_packet 参数的影响而导致插入失败。
mysql备份与恢复方案
服务器备份方案一、MYSQL数据库备份与恢复:数据库本地备份:当数据量少的时候可以在每天凌晨1点-3点进行完全备份,随着数据库的增大,可以2两小时(按照需求设置时间)做增量备份与完全备份相结合的备份方式以确保数据的安全。
数据库完全备份脚本:1.确定我们备份文件存放的目录这里我把所有备份文件放到/home/mysqlback2.确定需要备份的数据库,这里我们用备份d_test这个数据库来说明。
3.确定我们要备份的时间,我们以每天两小时备份一次做说明。
#!/bin/shdbuser="root"dbpasswd="123456"dbname="d_test"date1=`date +%Y%m%d`date2=`date +%Y%m%d%H%M%S`date3=`date -d -5day +"%Y%m%d"`back="/home/mysqlback/$date1"if [ ! -d $back ]thenmkdir -p $backfimysqldump -u$dbuser -p$dbpasswd $dbname | gzip > $back/$dbname$date2.sql.gzcd /home/mysqlbackrm -rf $date3#!/bin/sh #shell脚本dbuser="root" #定义数据库用户名dbpasswd="123456" #定义数据库密码dbname="d_test" #定义需要备份的数据库date1=`date +%Y%m%d` #读取当前日期date2 = `date +%Y%m%d%H%M%S` #读取当前的日期时间Y年m月d日H小时M分钟S秒date3 = `date -d -5day +"%Y%m%d"` #读取当天日期之5天前的日期back = /home/mysqlback/$date1 #备份文件存放目录#判断是不是有文件存放目录如果没有则新建。
MySQL数据备份与还原
MySQL数据备份与还原⼀、数据备份 1、使⽤mysqldump命令备份 mysqldump命令将数据库中的数据备份成⼀个⽂本⽂件。
表的结构和表中的数据将存储在⽣成的⽂本⽂件中。
mysqldump命令的⼯作原理很简单。
它先查出需要备份的表的结构,再在⽂本⽂件中⽣成⼀个CREATE语句。
然后,将表中的所有记录转换成⼀条INSERT语句。
然后通过这些语句,就能够创建表并插⼊数据。
1、备份⼀个数据库 mysqldump基本语法: mysqldump -u username -p dbname table1 table2 ...-> BackupName.sql 其中:dbname参数表⽰数据库的名称;table1和table2参数表⽰需要备份的表的名称,为空则整个数据库备份;BackupName.sql参数表设计备份⽂件的名称,⽂件名前⾯可以加上⼀个绝对路径。
通常将数据库被分成⼀个后缀名为sql的⽂件; 使⽤root⽤户备份test数据库下的person表mysqldump -u root -p test person > D:\backup.sql 其⽣成的脚本如下: ⽂件的开头会记录MySQL的版本、备份的主机名和数据库名。
⽂件中以“--”开头的都是SQL语⾔的注释,以"/*!40101"等形式开头的是与MySQL有关的注释。
40101是MySQL数据库的版本号,如果MySQL的版本⽐1.11⾼,则/*!40101和*/之间的内容就被当做SQL命令来执⾏,如果⽐4.1.1低就会被当做注释。
2、备份多个数据库 语法:mysqldump -u username -p --databases dbname2 dbname2 > Backup.sql 加上了--databases选项,然后后⾯跟多个数据库mysqldump -u root -p --databases test mysql > D:\backup.sql 3、备份所有数据库 mysqldump命令备份所有数据库的语法如下:mysqldump -u username -p -all-databases > BackupName.sql ⽰例:mysqldump -u -root -p -all-databases > D:\all.sql 2、直接复制整个数据库⽬录 MySQL有⼀种⾮常简单的备份⽅法,就是将MySQL中的数据库⽂件直接复制出来。
MySql数据库备份与恢复
MySql数据库备份与恢复MySQL数据库备份与恢复尽管采取了⼀些管理措施来保证数据库的安全,但是在不确定的意外情况下,总是有可能造成数据的损失。
例如,意外的停电,不⼩⼼的操作失误等都可能造成数据的丢失。
所以为了保证数据的安全,我们需要定期对数据进⾏备份。
如果数据库中的数据出现了错误,就需要使⽤备份好的数据进⾏数据还原,这样可以将损失降⾄最低。
数据库为什么需要备份任何数据库都需要备份,备份数据是维护数据库必不可少的操作。
备份就是为了防⽌原数据丢失,保证数据的安全。
当数据库因为某些原因造成部分或者全部数据丢失后,备份⽂件可以帮我们找回丢失的数据。
因此,数据备份是很重要的⼯作。
常见数据库备份的应⽤场景如下。
数据丢失应⽤场景:⼈为操作失误造成某些数据被误操作软件 BUG 造成部分数据或全部数据丢失硬件故障造成数据库部分数据或全部数据丢失安全漏洞被⼊侵数据恶意破坏⾮数据丢失应⽤场景:特殊应⽤场景下基于时间点的数据恢复开发测试环境数据库搭建相同数据库的新环境搭建数据库或者数据迁移以上列出的是⼀些数据库备份常见的应⽤场景,数据库备份还有其它应⽤场景,这⾥就不⼀⼀列举了。
⽐如磁盘故障导致整个数据库所有数据丢失,并且⽆法从已经出现故障的硬盘上⾯恢复出来时,可以通过最近时间的整个数据库的物理或逻辑备份数据⽂件,尽可能的将数据恢复到故障之前最近的时间点。
操作失误造成数据被误操作后,我们需要有⼀个能恢复到错误操作时间点之前的瞬间的备份⽂件存在,当然这个备份可能是整个数据库的备份,也可以仅仅只是被误操作的表的备份。
MySQL备份类型备份是以防万⼀的⼀种必要⼿段,在出现硬件损坏或⾮⼈为的因素⽽导致数据丢失时,可以使⽤备份恢复数据,以将损失降低到最⼩程度,因此备份是必须的。
备份可以分为以下⼏个类型。
根据备份的⽅法(是否需要数据库离线)可以将备份分为:热备(Hot Backup)热备份可以在数据库运⾏中直接备份,对正在运⾏的数据库操作没有任何的影响,数据库的读写操作可以正常执⾏。
mysql数据库备份及还原
mysql数据库备份及还原⼀、Mysql数据库备份指令格式:mysqldump -h主机名 -P端⼝ -u⽤户名 -p密码 (–database) 数据库名 > ⽂件名.sql注:直接cmd执⾏该指令即可,不需要先mysql -u root -p链接数据库1、备份MySQL数据库的命令mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql(例:mysqldump -h 122.51.176.153 -uwang -p1992S@ sw_account --default-character-set=gbk --opt -Q -R --skip-lock-tables>testbackup.sql)2、备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库⽽不需要⼿动删除原有数据库。
mysqldump -–add-drop-table -uusername -ppassword databasename > backupfile.sql3、直接将MySQL数据库压缩备份mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz4、备份MySQL数据库某个(些)表mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql5、同时备份多个MySQL数据库mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql 6、仅备份数据库结构mysqldump –no-data –databases databasename1 databasename2 databasename3 > structurebackupfile.sql7、备份服务器上所有数据库mysqldump –all-databases > allbackupfile.sql⼆、数据库还原有三种⽅式:source命令、mysql、gunzip命令1、source 命令进⼊mysql数据库控制台,mysql -u root -pmysql>use 数据库然后使⽤source命令,后⾯参数为脚本⽂件(如这⾥⽤到的.sql)mysql>source /home/work/db/bkdb.sql2、mysqlmysql -hhostname -uusername -ppassword databasename < backupfile.sql3、gunzipgunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename三、通过binlog⽇志功能还原误删除数据。
数据库备份与还原
一、MySQL数据库备份
5、如填写无误,则会出
现数据库引擎。 6、依次双击激活引擎及 所需备份的数据库名, 出现如图所示。
一、MySQL数据库备份
7、右键单击所需备份的
数据库,选择“转储 SQL文件”,在弹出的 对话框中选择保存路径 及文件名即可。
一、MySQL数据库备份
8、如数据库内容无误,
一、MySQL数据库备份
2、进入MySQL数据库
路径,可以查看到所需 备份的数据库对应的文 件夹,将该文件夹直接 拷贝至其他位置即完成 备份。 注:每个MYSQL数据库 均对应有一个与数据库 名称相同的文件夹。
二、MSSQL数据库备份
备份为*.bak 1、打开
MSSQL2000“企业管理 器”,在“数据库”节 点下找到所需备份的数 据库,右键单击依次选 择“所有任务”-“备份 数据库”。
一、MySQL数据库备份
3、点击下方的“执行”
即可得到T-SQL码,将 这些代码复制保存为 *.sql文件,妥善放置即 可。 注:PHPmyAdmin备份 适合较小的数据库,如 5M以下。
一、MySQL数据库备份
1、使用Navicat对
MySQL数据库备份。 2、点击“连接” 3、连接名随意填,用于 区分; 主机名/IP地址:填写IP; 用户名、密码:填写服 务器MYSQL的登录信息。 4、“确定”
二、MySQL数据库还原
1、直接拷贝还原 2、若之前通过直接复制
数据库文件夹进行的备 份,则需要将该文件夹 完整地拷贝至MySQL数 据目录下,然后重新启 动MySQL服务即可生效。 注:服务面板打开命令:
Services.msc
三、MSSQL数据库还原
MySQl的备份与恢复
MySQl的备份与恢复 如果没有提前做好备份规划,也许以后会发现已经错失了⼀些最佳的选择。
例如,在服务器已经配置好以后,才想起应该使⽤LVM,以便可以获取⽂件系统的快照——但这时已经太迟了。
在为备份配置系统参数时,可能没有注意到某些系统配置对性能有着重要影响。
如果没有计划做定期的恢复演练,当真的需要恢复时,就会发现并没有那么顺利。
我们在此假设⼤部分⽤户主要使⽤InnoDB⽽不是MyISAM。
在本章中,我们不会涵盖⼀个精⼼设计的备份和恢复解决⽅案的所有部分——⽽仅涉及与MySQL相关的部分。
我们不打算包括的话题如下:安全(访问备份,恢复数据的权限,⽂件是否需要加密)。
备份存储在哪⾥,包括它们应该离源数据多远(在⼀块不同的盘上,⼀台不同的服务器上,或离线存储),以及如何将数据从源头移动到⽬的地。
保留策略、审计、法律要求,以及相关的条款。
存储解决⽅案和介质,压缩,以及增量备份。
存储的格式。
对备份的监控和报告。
存储层内置备份功能,或者其他专⽤设备,例如预制式⽂件服务器。
像这样的话题已经在许多书中涉及,例如W.Curtis Preston的 Backup & Recouery(O’Reilly) 。
在开始本章之前,让我们先澄清⼏个核⼼术语。
⾸先,经常可以听到所谓的热备份、暖备份和冷备份。
⼈们经常使⽤这些词来表⽰⼀个备份的影响:例如,“热”备份不需要任何的服务停机时间。
问题是对这些术语的理解因⼈⽽异。
有些⼯具虽然在名字中使⽤了“热备份”,但实际上并不是我们所认为的那样。
我们尽量避开这些术语,⽽直接说明某个特别的技术或⼯具对服务器的影响。
另外两个让⼈困惑的词是还原和恢复。
在本章中它们有其特定的含义。
还原意味着从备份⽂件中获取数据,可以加载这些⽂件到MySQL⾥,也可以将这些⽂件放置到MySQL期望的路径中。
恢复⼀般意味着当某些异常发⽣后对⼀个系统或其部分的拯救。
包括从备份中还原数据,以及使服务器完全恢复功能的所有必要步骤,例如重启MySQL、改变配置和预热服务器的缓存等。
Mysql数据库的备份与恢复技术
Mysql数据库的备份与恢复技术Mysql数据库的备份与恢复⽬录⼀、数据备份的重要性⼆、数据库备份的分类三、常见的备份⽅法四、MySQL完全备份五、MySQL物理冷备份及恢复六、mysqldump备份和恢复七、MySQL增量备份与恢复⼀、数据备份的重要性1.1、在⽣产环境中,数据的安全性⾄关重要1.2、任何数据的丢失都可能产⽣严重的后果1.3、造成数据丢失的原因1.3.1、程序错误1.3.2、⼈为操作错误1.3.3、运算错误1.3.4、磁盘故障1.3.5、灾难(如⽕灾、地震等)举例:携程宕机的损失为每⼩时106.48万美元⼆、数据库备份的分类2.1、从物理与逻辑的⾓度,备份可分为2.1.1、物理备份:对数据库操作系统的物理⽂件(如数据⽂件、⽇志⽂件等)的备份物理备份⽅法:①冷备份(脱机备份):是在关闭数据库的时候进⾏的②热备份(联机备份):数据库处于运⾏状态,依赖于数据库的⽇志⽂件③温备份:数据库锁定表格(不可写⼊但可读)的状态下进⾏备份操作2.1.2、逻辑备份:对数据库逻辑组件(如:表等数据库对象)的备份2.2、从数据库的备份策略⾓度,备份可分为2.2.1、完全备份:每次对数据库进⾏完整的备份2.2.2、差异备份:备份⾃从上次完全备份之后被修改过的⽂件2.2.3、增量备份:只有在上次完全备份或者增量备份后被修改的⽂件才会被备份三、常见的备份⽅法3.1、物理冷备3.1.1、备份时将数据库处于关闭状态,直接打包数据库⽂件3.1.2、备份速度快,恢复时也是最简单的3.2、专⽤备份⼯具mydump或mysqlhotcopy3.2.1、mydump常⽤的逻辑备份⼯具3.2.2、mysqlhotcopy仅拥有备份MyISAM和ARCHIVE表3.3、启⽤⼆进制⽇志进⾏增量备份3.3.1、进⾏增量备份,需要刷新⼆进制⽇志3.4、第三⽅⼯具备份3.4.1、免费的MySQL热备份软件Percona XtraBackup四、MySQL完全备份4.1、是对整个数据库、数据库结构和⽂件结构的备份4.2、保存的是备份完成时刻的数据库4.3、是差异备份与增量备份的基础4.4、优点:4.4.1、备份与恢复操作简单⽅便4.5、缺点:4.5.1、数据存在⼤量的重复4.5.2、占⽤⼤量的备份空间4.5.3、备份与恢复时间长4.6、数据库完全备份分类4.6.1、物理冷备份与恢复①关闭MySQL数据库②使⽤tar命令直接打包数据库⽂件夹③直接替换现有MySQL⽬录即可4.6.2、mysqldump备份与恢复①MySQL⾃带的备份⼯具,可⽅便实现对MySQL的备份②可以将指定的库、表导出为SQL脚本③使⽤命令mysql导⼊备份的数据五、MySQL物理冷备份及恢复1 #数据库创建数据库和表2 mysql -uroot -p3 mysql> create datebase test;4 mysql> use test;5 mysql> create table aa(id char(24) not null,name varchar(36) not null,score int(3) not null,primary key(id));6 mysql> insert into aa(id,name,score) values(1,'lisi',88),(2,'zhangsan',60),(3,'wangwu',78);7 mysql> select * from aa;8 #物理冷备份9 systemctl stop mysqld #冷备份⼀定要关闭数据库服务10 mkdir /backup11 tar zcf /backup/mysql_all-$(date +%F).tar.gz /usr/local/mysql/data12 systemctl start mysqld13 #误删除操作14 mysql -uroot -p15 mysql> delete from aa where name='zhangsan';16 mysql> select * from aa;17 #恢复数据库18 systemctl stop mysqld19 mkdir /bak20 mv /usr/local/mysql/data /bak21 mkdir /restore22 tar zxf /backup/mysql_all-$(date +%F).tar.gz -C /restore23 mv /restore/usr/local/mysql/date /usr/local/mysql24 systemctl start mysqld25 #查看数据26 mysql -uroot -p27 mysql> use test;28 mysql> select * from aa;六、mysqldump备份和恢复1 mysqldump -u root -p --all-databses > all-data-$(date +%F).sql ###备份所有数据库2 mysqldump -u root -p -databases auth mysql > auth-mysql.sql ###备份auth和mysql库3 mysqldump -u root -p auth > auth-$(data +%F).sql ###备份auth数据库4 mysqldump -u root -p mysql user > mysql-user-$(date +%F).sql ###备份mysql的user表5 mysqldump -u root -p -d mysql user > /tmp/desc-mysql-user.sql ###备份mysql库user表的结构6.1、⽅法⼀1 mysqldump -u root -p test > test-$(date +%F).sql2 mysql> drop database test;3 mysql> create database test2; ###建⽴空库4 mysql -u root -p test2 < test-2020-10-23.sql6.2、⽅法⼆1 mysqldump -u root -p test > test-$(date +%F).sql2 mysql> drop database test;3 mysql> create database test2;4 mysql> use test2;5 mysql> source /root/test-2020-10-24.sql;七、MySQL增量备份与恢复7.1、MySQL增量备份7.1.1、使⽤mysqldump进⾏完全备份存在的问题①备份数据中有重复数据②备份时间与恢复时间过长7.1.2、MySQL增量备份是⾃上⼀次备份后增加/变化的⽂件或者内容7.1.3、特点没有重复数据,备份量不⼤,时间短恢复需要上次完全备份及完全备份之后所有的增量备份才能恢复,⽽且要对所有增量备份进⾏逐个反推恢复7.2、MySQL数据库增量恢复7.2.1、⼀般恢复将所有备份的⼆进制⽇志内容全部恢复7.2.2、断点恢复基于位置恢复数据库在某⼀时间点可能既有错误的操作也有正确的操作可以基于精准的位置跳过错误的操作基于时间点恢复跳过某个发⽣错误的时间点实现数据恢复7.3、增量恢复的⽅法7.3.1、⼀般恢复mysqlbinlog [–no-defaults] 增量备份⽂件 | mysql -u ⽤户名 -p7.3.2、基于位置的恢复恢复数据到指定位置(到错误操作前的最后⼀次正确操作)mysqlbinlog --stop-position=‘操作id’ ⼆进制⽇志 | mysql -u ⽤户名 -p密码从指定的位置开始恢复数据(跳过错误操作后的第⼀次正确操作)mysqlbinlog --start-position=‘操作id’ ⼆进制⽇志 | mysql -u ⽤户名 -p密码7.3.3、基于时间点恢复跳过某个发⽣错误的时间点实现数据恢复恢复数据到指定时间(停⽌错误操作的时间)mysqlbinlog --stop-datetime=‘错误时间’ ⼆进制⽇志 | mysql -u ⽤户名 -p密码从指定的位置开始恢复数据(跳过错误操作后的第⼀次正确操作)mysqlbinlog --start-datetime=‘正确操作时间’ ⼆进制⽇志 | mysql -u ⽤户名 -p密码时间点恢复:1 [root@server1 ~]# mkdir -p /opt/bak_sql2 [root@server1 ~]# mysqldump -uroot -p test2 > /opt/bak_sql/test2-$(date +%F).sql; ###完整备份34 [root@server1 ~]# vi /etc/f5 [mysqld]6 log_bin=/usr/local/mysql/data/mysql_bin ###开启增量备份78 [root@server1 ~]# systemctl restart mysqld910 [root@server1 ~]# mysqladmin -uroot -p flush-logs ###将⼆进制⽇志更新,产⽣新的⽇志⽂件11 [root@server1 ~]# cd /usr/local/mysql/data/12 [root@server1 data]# ll ###查询增量备份结果1314 [root@server1 ~]# mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysql_bin.000002 ###查询该⼆进制⽇志内容是否正确1516 mysql> insert into aa values(4,'sisi',90); ###正确操作17 mysql> delete from aa where name='zhangsan'; ###错误操作18 mysql> insert into aa values(5,'haha',89); ###正确操作19 mysql> select * from aa;20 +----+--------+-------+21 | id | name | score |22 +----+--------+-------+23 | 1 | lisi | 88 |24 | 3 | wangwu | 78 |25 | 4 | sisi | 90 |26 | 5 | haha | 89 |27 +----+--------+-------+28 4 rows in set (0.01 sec)2930 [root@server1 ~]# mysqladmin -u root -p flush-logs; ###将⼆进制⽇志更新,产⽣新的⽇志⽂件31 [root@server1 ~]# cd /usr/local/mysql/data/32 [root@server1 data]# ll ###查询增量备份结果33 [root@server1 ~]# mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysql_bin.000003 ###查询该⼆进制⽇志内容是否正确3435 ###还原时间点的步骤36 mysql> use test2;37 mysql> drop table aa; ###先删掉坏的那张表38 [root@server1 ~]# mysql -u root -p test2 < /opt/bak_sql/test2-2020-10-24.sql ###还原完全备份的数据库3940 [root@server1 ~]# mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysql_bin.000002 ###查询该⼆进制⽇志内容41 # at 61342 #201024 0:55:25 server id 1 end_log_pos 665 CRC32 0xa674c8df Delete_rows: table id 219 flags: STMT_END_F43 ### DELETE FROM `test2`.`aa`44 ### WHERE45 ### @1=246 ### @2='zhangsan'47 ### @3='60'48 # at 66549 #201024 0:55:25 server id 1 end_log_pos 696 CRC32 0x297a966a Xid = 1450 COMMIT/*!*/;51 # at 69652 #201024 0:55:48 server id 1 end_log_pos 761 CRC32 0x11834792 Anonymous_GTID last_committed=2 sequence_number=3 rbr_only=yes53 /*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;54 SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;55 # at 76156 #201024 0:55:48 server id 1 end_log_pos 834 CRC32 0x28de3d38 Query thread_id=4 exec_time=0 error_code=057 SET TIMESTAMP=1603526148/*!*/;58 BEGIN59 /*!*/;60 # at 83461 #201024 0:55:48 server id 1 end_log_pos 886 CRC32 0xa67e20b9 Table_map: `test2`.`aa` mapped to number 21962 # at 88663 #201024 0:55:48 server id 1 end_log_pos 934 CRC32 0x8a2c0765 Write_rows: table id 219 flags: STMT_END_F64 ### INSERT INTO `test2`.`aa`65 ### SET66 ### @1=567 ### @2='haha'68 ### @3='89'6970 [root@server1 ~]# mysqlbinlog --no-defaults --stop-datetime='2020-10-24 0:55:25' /usr/local/mysql/data/mysql_bin.000002 | mysql -u root -p ###停⽌错误的时间7172 [root@server1 ~]# mysqlbinlog --no-defaults --start-datetime='2020-10-24 0:55:48' /usr/local/mysql/data/mysql_bin.000002 | mysql -u root -p ###开始正确的时间7374 mysql> select * from aa; ###查看是否复原75 +----+----------+-------+76 | id | name | score |77 +----+----------+-------+78 | 1 | lisi | 88 |79 | 2 | zhangsan | 60 |80 | 3 | wangwu | 78 |81 | 4 | sisi | 90 |82 | 5 | haha | 89 |83 +----+----------+-------+84 5 rows in set (0.00 sec)位置点恢复:1 mysql> use test2;2 mysql> delete from aa where name='lisi'; ###误操作3 mysql> delete from aa where name='haha'; ###误操作45 [root@server1 ~]# mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysql_bin.000003 ###查询该⼆进制⽇志内容6 ...省略内容7 # at 21688 #201024 1:26:20 server id 1 end_log_pos 2220 CRC32 0x5a192cfd Table_map: `test2`.`aa` mapped to number 2219 # at 222010 #201024 1:26:20 server id 1 end_log_pos 2268 CRC32 0x30f35bdf Delete_rows: table id 221 flags: STMT_END_F11 ### DELETE FROM `test2`.`aa`12 ### WHERE13 ### @1=114 ### @2='lisi'15 ### @3='88'16 # at 226817 #201024 1:26:20 server id 1 end_log_pos 2299 CRC32 0xe8fa9bd8 Xid = 12318 COMMIT/*!*/;19 # at 229920 #201024 1:26:26 server id 1 end_log_pos 2364 CRC32 0xfa901848 Anonymous_GTID last_committed=9 sequence_number=10 rbr_only=yes21 /*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;22 SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;23 # at 236424 #201024 1:26:26 server id 1 end_log_pos 2437 CRC32 0x04379db1 Query thread_id=12 exec_time=0 error_code=025 SET TIMESTAMP=1603527986/*!*/;26 BEGIN27 /*!*/;28 # at 243729 #201024 1:26:26 server id 1 end_log_pos 2489 CRC32 0xa0c3b6c1 Table_map: `test2`.`aa` mapped to number 22130 # at 248931 #201024 1:26:26 server id 1 end_log_pos 2537 CRC32 0xd7509926 Delete_rows: table id 221 flags: STMT_END_F32 ### DELETE FROM `test2`.`aa`33 ### WHERE34 ### @1=535 ### @2='haha'36 ### @3='89'37 # at 253738 #201024 1:26:26 server id 1 end_log_pos 2568 CRC32 0xb7b17eee Xid = 12439 ...省略内容4041 [root@server1 ~]# mysqlbinlog --no-defaults --stop-position='2168' /usr/local/mysql/data/mysql_bin.000003 | mysql -u root -p ###上⼀次操作正确的位置点停⽌42 [root@server1 ~]# mysqlbinlog --no-defaults --start-position='2537' /usr/local/mysql/data/mysql_bin.000003 | mysql -u root -p ###下⼀次操作正确的位置点开始4344 mysql> select * from aa;45 +----+----------+-------+46 | id | name | score |47 +----+----------+-------+48 | 1 | lisi | 88 |49 | 2 | zhangsan | 60 |50 | 3 | wangwu | 78 |51 | 4 | sisi | 90 |52 | 5 | haha | 89 |53 +----+----------+-------+54 5 rows in set (0.00 sec)。
第8章 MySQL数据库备份与恢复
8.2.2 使用客户端工具:备份数据库
【例8.7】假设xs表结构损坏,备份文件在D盘file目录下,现将包含xs表结构 的.sql文件恢复到服务器中。命令如下: mysql -uroot -p19830925 xscj<D:/file/xs.sql 如果只恢复表中的数据,就要使用mysqlimport客户端。
8.2.2 使用客户端工具:备份数据库
使用客户端程序的方法如下。 打开命令行,进入bin目录: cd C:\Program Files\MySQL\MySQL Server 5.6\bin 后面介绍的客户端命令都在此处输入,如图8.2所示。
此处输入客 户端命令
8.2.2 使用客户端工具:备份数据库
8.2 常用的备份恢复方法
说明: LOW_PRIORITY | CONCURRENT:若指定LOW_PRIORITY,则延迟语句的 执行。 LOCAL:若指定了LOCAL,则文件会被客户主机上的客户端读取,并被发送 到服务器。 文件名.txt:该文件中保存了待存入数据库的数据行,它由SELECT INTO…OUTFILE命令导出产生。 表名:该表在数据库中必须存在,表结构必须与导入文件的数据行一致。 REPLACE | IGNORE:如果指定了REPLACE,则当文件中出现与原有行相同 的唯一关键字值时,输入行会替换原有行。 FIELDS子句:和SELECT..INTO OUTFILE语句中类似。 LINES子句:TERMINATED BY亚子句用来指定一行结束的标志。 IGNORE number LINES:这个选项可以用于忽略文件的前几行。 列名或用户变量:如果需要载入一个表的部分列或文件中字段值顺序与表中列 的顺序不同,就必须指定一个列清单。 SET子句:SET子句可以在导入数据时修改表中列的值。
MySQL的备份恢复
MySQL的备份恢复介绍备份策略的设计备份周期根据数据量做评估,一般60G数据(三四十分钟),每天全备备份工具•mysqldump•percona xtrabackup•mysqlbinlog备份方式逻辑备份•全备: mysqldump•增量: binlog物理备份•全备: XBK (percona xtrabackup)•增量: XBK (percona xtrabackup)检查备份的可用性看备份日志,和备份文件(大小,内容)刚去公司crontab -l 查看备份脚本和备份路径定期恢复演练数据恢复只要备份和日志是完整的,恢复到故障之前的时间点(快速)数据迁移MySQL -> MySQL其他数据库 -> MySQLMySQL -> 其他数据库备份介绍备份类型•热备:数据库正在运行时的备份,对业务影响最小(innodb)•温备:锁表备份,长时间锁表(MyISAM)•冷备:业务关闭情况下,进行备份mysqldump 备份命令介绍连接数据库的参数-u-p-S-h-P基础备份参数-A 全备-B 备份单库或多库(有建库和use 库的语句)针对库级别库名表名(单张表或多张表备份)针对表级别特殊的备份参数-R 备份存储过程和函数(存储过程和函数,相当于shell中的脚步,集合了多个命令)-E event 事件(相当于linux的crontab 计划任务)--triggers 触发器--master-data=2记录了备份时刻的binlog和pos节点号--master-data=1 使用change 语句的方式记录binlog和pos 节点--master-data=2 使用注释的方式记录 binlog和pos节点如果不加 --single-transaction ,会进行全局锁表,进行温备如果加--single-transaction,对与Innodb进行不锁表备份,(快照备份),非Innodb的表进行锁表--single-transaction 在备份的时候,会创建一个单独的事务。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
下面文章摘录的主题:mysql日志文件,使用mysqld加相应选项来启用某种日志。
Mysql 完全备份及恢复:mysqldump对MyISAM或InnoDB完全备份,mysqlhotcopy对MyISAM完全备份。
增量备份:使用二进制日志增量备份,使用mysqlbinlog命令恢复二进制日志。
SQL语法备份及恢复。
拷贝数据文件备份(对Innodb还需拷贝日志文件)。
MyISAM表的检查与修复(另见《MySql存储引擎》)。
Innodb表的碎片整理和模糊检查点。
MySQL备份和恢复作/译者:叶金荣本文讨论MySQL的备份和恢复机制,以及如何维护数据表,包括最主要的两种表类型:MyISAM和Innodb,文中设计的MySQL版本为 5.0.22。
目前MySQL支持的免费备份工具有:mysqldump、mysqlhotcopy,还可以用SQL语法进行备份:BACKUP TABLE或者SELECT INTO OUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文件和相关的配置文件。
MyISAM表是保存成文件的形式,因此相对比较容易备份,上面提到的几种方法都可以使用。
Innodb所有的表都保存在同一个数据文件ibdata1中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,免费的方案可以是拷贝数据文件、备份binlog,或者用mysqldump。
1、mysqldump1.1备份mysqldump是采用SQL级别的备份机制,它将数据表导成SQL脚本文件,在不同的MySQL版本之间升级时相对比较合适,这也是最常用的备份方法。
现在来讲一下mysqldump的一些主要参数:1.--compatible=name它告诉mysqldump,导出的数据将和哪种数据库或哪个旧版本的MySQL服务器相兼容。
值可以为ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options等,要使用几个值,用逗号将它们隔开。
当然了,它并不保证能完全兼容,而是尽量兼容。
2.--complete-insert,-c导出的数据采用包含字段名的完整INSERT方式,也就是把所有的值都写在一行。
这么做能提高插入效率,但是可能会受到max_allowed_packet参数的影响而导致插入失败。
因此,需要谨慎使用该参数,至少我不推荐。
3.--default-character-set=charset指定导出数据时采用何种字符集,如果数据表不是采用默认的latin1字符集的话,那么导出时必须指定该选项,否则再次导入数据后将产生乱码问题。
4.--disable-keys告诉mysqldump在INSERT语句的开头和结尾增加/*!40000ALTER TABLE table DISABLE KEYS*/;和/*!40000ALTER TABLE table ENABLE KEYS*/;语句,这能大大提高插入语句的速度,因为它是在插入完所有数据后才重建索引的。
该选项只适合MyISAM表。
5.--extended-insert=true|false默认情况下,mysqldump开启--complete-insert模式,因此不想用它的的话,就使用本选项,设定它的值为false即可。
6.--hex-blob使用十六进制格式导出二进制字符串字段。
如果有二进制数据就必须使用本选项。
影响到的字段类型有BINARY、VARBINARY、BLOB。
7.--lock-all-tables,-x在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。
这是一个全局读锁,并且自动关闭--single-transaction和--lock-tables选项。
8.--lock-tables它和--lock-all-tables类似,不过是锁定当前导出的数据表,而不是一下子锁定全部库下的表。
本选项只适用于MyISAM表,如果是Innodb表可以用--single-transaction选项。
9.--no-create-info,-t只导出数据,而不添加CREATE TABLE语句。
10.--no-data,-d不导出任何数据,只导出数据库表结构。
11.--opt这只是一个快捷选项,等同于同时添加--add-drop-tables--add-locking--create-option--disable-keys--extended-insert--lock-tables--quick--set-charset选项。
本选项能让mysqldump很快的导出数据,并且导出的数据能很快导回。
该选项默认开启,但可以用--skip-opt禁用。
注意,如果运行mysqldump没有指定--quick或--opt选项,则会将整个结果集放在内存中。
如果导出大数据库的话可能会出现问题。
12.--quick,-q该选项在导出大表时很有用,它强制mysqldump从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。
13.--routines,-R导出存储过程以及自定义函数。
14.--single-transaction该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN不会阻塞任何应用程序且能保证导出时数据库的一致性状态。
它只适用于事务表,例如InnoDB和BDB。
本选项和--lock-tables选项是互斥的,因为LOCK TABLES会使任何挂起的事务隐含提交。
要想导出大表的话,应结合使用--quick选项。
15.--triggers同时导出触发器。
该选项默认启用,用--skip-triggers禁用它。
其他参数详情请参考手册,我通常使用以下SQL来备份MyISAM表:/usr/local/mysql/bin/mysqldump-uyejr-pyejr\--default-character-set=utf8--opt--extended-insert=false\--triggers-R--hex-blob-x db_name>db_name.sql使用以下SQL来备份Innodb表:/usr/local/mysql/bin/mysqldump-uyejr-pyejr\--default-character-set=utf8--opt--extended-insert=false\--triggers-R--hex-blob--single-transaction db_name>db_name.sql另外,如果想要实现在线备份,还可以使用--master-data参数来实现,如下:/usr/local/mysql/bin/mysqldump-uyejr-pyejr\--default-character-set=utf8--opt--master-data=1\--single-transaction--flush-logs db_name>db_name.sql它只是在一开始的瞬间请求锁表,然后就刷新binlog了,而后在导出的文件中加入CHANGE MASTER语句来指定当前备份的binlog位置,如果要把这个文件恢复到slave里去,就可以采用这种方法来做。
1.2还原用mysqldump备份出来的文件是一个可以直接倒入的SQL脚本,有两种方法可以将数据导入。
1.直接用mysql客户端例如:/usr/local/mysql/bin/mysql-uyejr-pyejr db_name<db_name.sql2.用SOURCE语法其实这不是标准的SQL语法,而是mysql客户端提供的功能,例如:SOURCE/tmp/db_name.sql;这里需要指定文件的绝对路径,并且必须是mysqld运行用户(例如nobody)有权限读取的文件。
2、mysqlhotcopy2.1备份mysqlhotcopy是一个PERL程序,最初由Tim Bunce编写。
它使用LOCK TABLES、FLUSH TABLES和cp 或scp来快速备份数据库。
它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上。
mysqlhotcopy只能用于备份MyISAM,并且只能运行在类Unix和NetWare系统上。
mysqlhotcopy支持一次性拷贝多个数据库,同时还支持正则表达。
以下是几个例子:root#/usr/local/mysql/bin/mysqlhotcopy-h=localhost-u=yejr-p=yejr\db_name/tmp(把数据库目录db_name拷贝到/tmp下)root#/usr/local/mysql/bin/mysqlhotcopy-h=localhost-u=yejr-p=yejr\db_name_1...db_name_n/tmproot#/usr/local/mysql/bin/mysqlhotcopy-h=localhost-u=yejr-p=yejr\db_name./regex//tmp更详细的使用方法请查看手册,或者调用下面的命令来查看mysqlhotcopy的帮助:perldoc/usr/local/mysql/bin/mysqlhotcopy注意,想要使用mysqlhotcopy,必须要有SELECT、RELOAD(要执行FLUSH TABLES)权限,并且还必须要能够有读取datadir/db_name目录的权限。
2.2还原mysqlhotcopy备份出来的是整个数据库目录,使用时可以直接拷贝到mysqld指定的datadir(在这里是/usr/local/mysql/data/)目录下即可,同时要注意权限的问题,如下例:root#cp-rf db_name/usr/local/mysql/data/root#chown-R nobody:nobody/usr/local/mysql/data/(将db_name目录的属主改成mysqld运行用户)3、SQL语法备份3.1备份BACKUP TABLE语法其实和mysqlhotcopy的工作原理差不多,都是锁表,然后拷贝数据文件。
它能实现在线备份,但是效果不理想,因此不推荐使用。
它只拷贝表结构文件和数据文件,不同时拷贝索引文件,因此恢复时比较慢。
例子:BACK TABLE tbl_name TO'/tmp/db_name/';注意,必须要有FILE权限才能执行本SQL,并且目录/tmp/db_name/必须能被mysqld用户可写,导出的文件不能覆盖已经存在的文件,以避免安全问题。