1.逻辑备份
mysql中的逻辑备份就是将数据库中的数据备份为一个文本文件, 且此文本文件可以查看和编辑
mysqldump
[root@server2 ~]# mysqldump
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
mysqldump -uroot -paixocm ds > ds.sql ---备份ds数据库
mysqldump ds stu dept > ds.sql ---备份ds库下的stu,dept表
mysqldump --databases ds ds2 > ds.sql ---备份多个库 (注意后面还原上的区别)
写锁: 本session增删改查均可, 其他session均为等待
读锁: 所有session只可select, 均不可增删改
flush tables with read lock; ----锁所有表
lock tables stu read或write;
unlock tables;
mysqldump -uroot -paixocm -lF ds > ds.sql
-l(小写) 给所有表加上读锁, 备份时只能读而不能写
-F (flush logs)生成新二进制日志文件
还原
mysql -uroot -paixocm ds < ds.sql -- 输入重定向, cat ds.sql | mysql用管道也可
或 use ds后 source /tmp/ds.sql
注意以上情况是没有加 --databases 备份,需要先新建好一个空的数据库,而加了的话,可以不要建新库,还原时自动建好。
不完全恢复
基于时间点恢复, 基于位置恢复(更精确,因为一个时间点存在并发性)
mysqlbinlog mysql-bin.000001 --stop-datetime="2012-1-1 12:1:2" | mysql -uroot -paix ds //可以参考bin日志
2.物理备份
cp数据库文件夹如ds
冷备份: 停服务后cp, 不停服务的话拷贝的数据不一致
热备份: 服务正常运行时cp(加读锁)
热备份例子(只对myisam表):
方法1:
/usr/local/mysql56/bin/mysqlhotcopy -u root -p aixocm -S … ds /tmp ---自动加锁了
方法2 (手工加读锁):
flush tables with read lock; -- 锁所有表, lock tables t1 read; 只锁t1
cp文件夹
unlock tables;
innodb表, 不支持,可以用第三方工具如:ibbackup工具, 收费。
还原:
cp -pr /tmp/ds /database/