本文首发在《旺旺知识库》html
使用mysqldump备份时,若是存储引擎为MyISAM,则只能实现温备份,并需使用选项--lock-all-tables锁定全部表。若是存储引擎为InnoDB,则加上--single-transaction选项,能够实现热备。mysql
使用mysqldump进行逻辑备份,还存在以下问题:sql
浮点数据丢失精度;数据库
备份出的数据更占用空间;不过可压缩后以大大节省空间服务器
不适合对大数据库(如一个库超过10G)作彻底备份dom
另外对InnoDB而言,须要使用mysql> FLUSH TABLES WITH READ LOCK;刷新并锁定表时,可能须要花大量的时间ide
对InnoDB而言,即便锁定了,也不必定觉得着没有数据的写入,此时事务日志可能还在同步到永久存储测试
SELECT * INTO OUTFILE '/path/to/somefile.txt' FROM tb_name [WHERE clause];大数据
LOAD DATA INFILE '/path/to/somefile.txt' INTO TABLE tb_name;spa
mysql> SELECT * INTO OUTFILE '/tmp/tutors.txt' FROM tutors;
Query OK, 8 rows affected (0.31 sec)[root@localhost ~]# cat /tmp/tutors.txt
2 HuangYaoshi M 63
3 Miejueshitai F 72
4 OuYangfeng M 76
6 YuCanghai M 56
7 Jinlunfawang M 67
8 HuYidao M 42
9 NingZhongze F 49
14 HuFei M 31
注意:导出的仅仅是数据,表结构并不会被导出。
mysql> CREATE TABLE test_tb LIKE tutors;
Query OK, 0 rows affected (1.28 sec)
mysql> LOAD DATA INFILE '/tmp/tutors.txt' INTO TABLE test_tb;
Query OK, 8 rows affected (0.17 sec)
Records: 8 Deleted: 0 Skipped: 0 Warnings: 0
$ mysql -uroot -p -e 'SHOW MASTER STATUS\G' > /path/to/master-`date +%F`.info
查看当前日志:
mysql> show master status;
+----------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------+----------+--------------+------------------+-------------------+
| mysqld-binlog.000007 | 650 | | | |
+----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
备份增量日志:须要注意的是,因为我使用了[FLUSH LOGS]滚动日志,所以理论上使用lvm快照卷备份后有两个日志的增量数据须要备份,即:mysqld-binlog.000006和mysqld-binlog.000007
查看备份开始时的日志位置:
[root@localhost ~]# cat /data/backup/master-2013-09-23.info
*************************** 1. row ***************************
File: mysqld-binlog.000006
Position: 120
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
导出日志:
[root@localhost ~]# mysqlbinlog --start-position=120 /data/mysql/mysqld-binlog.000006 >/data/backup/06.sql
[root@localhost ~]# mysqlbinlog /data/mysql/mysqld-binlog.000007 >/data/backup/07.sql
我这里仍是采用直接删除数据文件目录:
<a href="http://www.toxingwang.com/wp-content/uploads/2013/10/mysql4.jpg" class="cboxElement" rel="example4" 1523"="" style="text-decoration: none; color: rgb(1, 150, 227);">
此时已经没法正常中止mysqld了:
[root@localhost data]# service mysqld stop
ERROR! MySQL server PID file could not be found![root@localhost data]# killall mysqld
[root@localhost data]# cp -R /data/backup/full-bak-2013-09-23/mysql /data/
cp:是否覆盖"/data/mysql/localhost.localdomain.err"? yes[root@localhost mysql]# chown mysql.mysql -R /data/mysql
[root@localhost data]# service mysqld start
Starting MySQL SUCCESS!
[root@localhost ~]# mysql -uroot -p </data/backup/06.sql
[root@localhost ~]# mysql -uroot -p </data/backup/07.sql
设置每一个表独立使用一个表空间 [root@localhost ~]# echo "innodb_file_per_table = 1" >>/etc/my.cnf 重启生效: [root@localhost ~]# service mysqld restart