mysql学习7备份和导出导入

来源:互联网 发布:网络交换机与PLC通讯 编辑:程序博客网 时间:2024/04/28 08:53

携程网被黑,备份很重好

(1)数据库备份:直接拷贝data文件是不好的,因为mysql服务器可能在运行和操作数据库。备份还原还有:mysqlhotcopy工具。

./bin/mysqldump -u root -p --all-databases > dump-data/backup.sql     ----备份所有数据库。
./bin/mysqldump -u root -p surpas > dump-data/surpas-back.sql;  ----备份一个数据库。
./bin/mysqldump -u root -p --databases surpas mysql > dump-data/surpas-back.sql;  ----备份多个数据库。

(2)还原:注意,因为数据库的操作用户是mysql.mysql,因此需要他对/usr/local/mysql/data有权限
./bin/mysql -u root -p < dump-data/backup.sql     ----注意还原这里时mysql而不是mysqldump,可以不带数据库名字全部还原。
./bin/mysql -u root -p surpas < dump-data/surpas-back.sql;  ----还原一个数据库。必须代数据库名字。
./bin/mysql -u root -p < dump-data/surpas-mysql-back.sql; ----还原备份的多个数据库。可以不带数据库名字全部还原。
------注意:一个数据库,必须带数据库名字surpas。我们打开dump-data/surpas-back.sql可以看到:
......(省略)
DROP TABLE IF EXISTS `employer`; ----这里直接以表操作开始
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `employer` (
.....(省略)
打开dump-data/surpas-mysql-back.sql可以看到:
.....(省略)
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `surpas` /*!40100 DEFAULT CHARACTER SET utf8 */;------这里以创建数据库开始
USE `surpas`;
--
-- Table structure for table `employer`
--
DROP TABLE IF EXISTS `employer`;
.....(省略)

发现错误一个:
还原时出现了:Can't create table 'admin_table'。一般情况是因为权限不够。chown -R mysql.mysql /usr/local/mysql/data;chgrp -R mysql /usr/local/mysql.但是这次我将/usr/local/mysql/data删除了,因此导致了数据库不能用了。我使用了/usr/local/mysql/scripts/mysql_install_db --usr=mysql;重新安装。恢复了/usr/local/mysql/data,但是我使用service mysqld restart.启动服务器出现了下面问题:
-----The server quit without updating PID file (/usr/local/mysql/data/actiontec12.pid).
-----/usr/local/mysql/data/actiontec12.pid的确不存在,可能有2个原因:1./usr/local/mysql/data/权限不够。2.mysql.server的端口被占用了。使用以下命令:
netstat -tunlp |grep 3306
-----tcp6       0      0 :::3306                 :::*                    LISTEN      3560/mysqld
-----说明端口被mysqld占用了,看看进程:
ps -aux | grep mysql;
-----3560 pts/1    Sl     0:08 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin user=mysql --log-error=/usr/local/mysql/data/actiontec12.err --pid-file=/usr/local/mysql/data/actiontec12.pid
-----里面也有个:--pid-file=/usr/local/mysql/data/actiontec12.pid,指定了pid文件,我将这个进程删除掉:
kill -9 3560;
service mysqld restart;可以用了。

(3)导出表格:
(3-1)select * from suremployer where num>1 into outfile '/usr/local/mysql/exportTableDir/suremployerTable.txt';
文件如下:
201500001       1000    张三    25      男      students street
201500003       1010    李四    24      女      grade street
-----select * from suremployer where num>1 into outfile '/usr/local/mysql/exportTableDir/suremployerTable.txt' [OPTION];可能的OPTION操作是:fields terminated by '\t'每行中字段分隔符,默认'\t'制表符;FIELDS ENCLOSED BY '\"'每个字段用"括起来,默认无;FIELDS OPTIONALLY ENCLOSED BY '\"'每个字符串字段用"括起来,默认无;FIELDS ESCAPED BY ''转义字符(如\t),默认'\';LINES STARTING BY '>' 行开始用'>',默认无;lines terminated by'\r\n' 行切换符号为'\r\n',默认'\n';
(3-2)select * from suremployer where num>1 into outfile '/usr/local/mysql/exportTableDir/suremployer.txt' fields terminated by ', ' enclosed by '\"' lines starting by '>>' terminated by '\r\n';
文件如下:如果用optionally enclosed by '\"';双引号只会括字符串。
>>"201500001", "1000", "张三", "25", "男", "students street"
>>"201500003", "1010", "李四", "24", "女", "grade street"
(3-3)使用mysqldump导出。
./bin/mysqldump -u root -p123456 -T '/usr/local/mysql/exportTableDir/' surpas employer "--fields-terminated-by=, " "--fields-optionally-enclosed-by=\"" "--lines-terminated-by=\n"
文件内容:
1, "黄冲", "男", 33, "1号街区"
2, "张三", "男", 25, \N
-----p123456输入密码,-T输入路径(这里输入路径而不是文件名,自动生成文件名employer.sql和employer.txt),surpas数据库,employer表,"--fields-terminated-by=, "可以要双引号也可以不要,但是不能写成:"--fields-terminated-by=', '"这就和select into outfile一样了,会出错:
错误:Field separator argument is not what is expected; check the manual when executing 'SELECT INTO OUTFILE'
(3-4)mysql导出:
mysql -u root -p -e "select * from suremployer" surpas > /usr/local/mysql/exportTableDir/mysuremployer.txt
mysql -u root -p --xml|-X|--html|-H -e "select * from suremployer" surpas > /usr/local/mysql/exportTableDir/mysuremployer.txt
--------:--xml/-X/--html/-H转成对应格式的文件。


(4)导入表格:
(4-1)使用load data infile into table.
load data infile '/usr/local/mysql/exportTableDir/employer.txt' into table employer fields terminated by ', ' optionally enclosed by '\"' lines terminated by '\n';
----他就像select的逆操作,观察表格的格式进行解析。fields terminated by等可以参考select;多了几项:IGNORE 10 LINES忽略10行;set column=表达式:指定列column指定表达式导入;(字段列表):根据该字段顺序加载。
(4-2)使用mysqlimport:
./bin/mysqlimport -u root -p surpas '/usr/local/mysql/exportTableDir/suremployer.txt' "--fields-terminated-by=, " "--fields-enclosed-by=\"" "--lines-terminated-by=\r\n" "--ignore-lines=3" ;
----注意:使用mysqlimport和mysqldump是不没有"--lines-starting-by",因此在使用select导出的时候最好不要用:lines starting by '>>'
0 0
原创粉丝点击