爱生活,爱养生 www.sijiyang.com 欢迎朋友来友联
分类: Mysql/postgreSQL
2014-03-06 15:33:39
原文地址:MySQL备份与恢复 作者:《一剑》飘香
MySQL还原
mysql db_name gunzip source /root/data.back
将数据库转移到新服务器
mysqldump -uusername -ppassword databasename | mysql –host=*.*.*.* -C databasename
二、mysqlhotcopy -uusername -ppassword -hhostname db_name /tmp
注意,想要使用 mysqlhotcopy,必须要有 SELECT、RELOAD(要执行 FLUSH TABLES) 权限,并且还必须要能够有读取 datadir/db_name 目录的权限。
还原
mysqlhotcopy 备份出来的是整个数据库目录,使用时可以直接拷贝到 mysqld 指定的 datadir (在这里是 /usr/local/mysql/data/)目录下即可,同时要注意权限的问题,如下例:
cp -rf db_name /data
chown -R nobody:nobody /data
三、select into outfile
如:select * into outfile /tmp/stu.sql from stu;
还原:load data infile /tmp/stu.sql into table stu;
四、基于快照备份(注:此时存放数据的目录必须位于lvm卷上)
创建快照lvmcreate -L 1G -s -n data.snap /dev/myvg/lvdata
备份dump -[0-9]u -f /home/data.back /dev/myvg/data.snap
备份出来数据以后就可以删除快照了lvmremove /dev/myvg/data.snap
恢复restore -rf /home/data.back
五、基于时间点mysqlbin --start-position n1 --stop-position n2 >/home/data.back
--start-datatime
--stop-datatime
mysqlbinlog --start-position 824 --stop-position 1352 >/tmp/haha.sql
六、最直接,直接复制数据copy /data/*.sql /path/to/file
常用:MySQL备份与恢复实例:
一、基于逻辑备份与恢复,我们用MySQL自带的工具mysqldump来实现
我通常使用以下 SQL 来备份 MyISAM 表:
1>mysqldump -uroot -p --events --triggers --flush-logs db_name >/tmp/mydb-`date +"%F-%H-%M-%S"`.sql
2>mysqldump -uroot -p --events --triggers --flush-logs --routines --lock-all-tables db_name > /tmp/mydb-`date +"%F-%H-%M-%S"`.sql
使用以下 SQL 来备份 Innodb 表:
1>mysqldump -uroot -p --events --triggers --routines --flush-logs --single-transaction --master-data=2 db_name > /tmp/mydb-`date +"%F-%H-%M-%S"`.sql
另外,如果想要实现在线备份,还可以使用 --master-data 参数来实现,如下:
1>mysqldump -uroot -p --events --triggers --routines --flush-logs --master-data=1 --single-transaction db_name > /tmp/mydb-`date +"%F-%H-%M-%S"`.sql
MySQL的恢复
首先创建要恢复的数据库如:CREATE DATABASE mydb;
1>mysql -uroot mydb < /tmp/mydb-`date +"%F-%H-%M-%S"`.sql
基于时间点的备份
mysqlbinlog --start-position 106 --stop-position 513 > /tmp/mydbstore.sql
基于时间点的恢复
mysql -uroot -p < /tmp/mydbstore.sql
二、基于快照的备份与恢复
LVM的实现
要保证datadir在LVM分区上。
FLUSH TABLES WITH READ LOCK;
创建快照
UNLOCK TABLES;
停止服务service mysqld stop
将创建的快照挂载到一个目录如:mount /dev/vg0/mysqldata /snap
cp -rp /data/* /snap/
之后就可以拷贝要备份的数据,拷贝完成后我们可以装饰快照删除
lvremove /dev/vg0/mysqldata
恢复数据可直接拷贝如:cp -rp /path/datadb /data/
基于时间点的恢复mysqlbinlog --start-position 206 --stop-position 445 mysql-bin.000005 >/tmp/mysql.sql
mysql -uroot -p