一、备份数据库
-
1.1.mysqldump进行逻辑备份单个库
mysql数据库自带了mysqldump备份命令,其语法为:
mysqldump -u 用户名 -p 数据库名 >备份的文件名
例如:备份名为data_default的库mysql -uroot -p123456 -e "use data_default;show tables;select * from student"#在linux命令行查看mysql库中的表内容 mysqldump -uroot -p123456 data_default >/opt/mysql_bak.sql #备份到/opt/mysql_bak.sql mysqldump -uroot -p123456 --default-character=utf-8 data_default >/opt/mysql_bak.sql #指定字符集导出以免乱码。或者--default-character-set=utf8 egrep -v "^$|--|#|\*" /opt/mysql_bak.sql #查看备份 DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` char(15) NOT NULL, `age` tinyint(2) NOT NULL DEFAULT '0', `dept` varchar(16) DEFAULT NULL, `sex` char(2) DEFAULT NULL, PRIMARY KEY (`id`), KEY `index_dept` (`dept`(8)) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;#建表的语句 LOCK TABLES `student` WRITE;#上锁 INSERT INTO `student` VALUES (1,'lily',0,NULL,NULL); #插入语句 UNLOCK TABLES; #mysql带-e参数实现非交互式对话 例如: [root@localhost ~]# mysql -uroot -p123456 -e "select * from data_default.student"
实际上用mysqldump备份,是把SQL语句备份下来(不记录查找的语句),然后删除原来的表重新操作。
备份时加入-B,可以自动建库。mysqldump -uroot -p123456 -B data_default >/opt/mysql_bak_b.sql #备份到/opt/mysql_bak_b.sql。
下面比较一下两个备份区别:
diff /opt/mysql_bak.sql /opt/mysql_bak_b.sql 18a19,26 -- Current Database: `data_default` -- CREATE DATABASE /*!32312 IF NOT EXISTS*/ `data_default` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `data_default`; -- 55c63 -- Dump completed on 2019-06-27 5:22:30 --- -- Dump completed on 2019-06-27 5:48:49
发现多了一个create语句和use语句,加上-B参数的作用是增加创建数据库和链接数据库命令。恢复命令与不加B的不同:
mysql -uroot -p123456 </opt/mysql_bak_b.sql
指定压缩命令来备份数据库:
mysqldump -uroot -p123456 --default-character=utf-8 -B data_default|gzip>/opt/mysql_bak_b.sql.gz #gzip压缩命令来压缩
-
1.2 备份多个库
备份命令:mysqldump -uroot -p123456 --default-character=utf-8 -B data_default test|gzip>/opt/mysql_bak_b.mul.sql.gz #备份data_default和 test两个库
备份所有库:
mysql -uroot -p123456 -e "show databases;" |egrep -vi "database|information_schema| performance_schema|test"|sed 's#^([a-z].*$)#mysqldump -uroot -