新随笔  :: 管理

熟练掌握mysqldump和load ,mysqlimport,数据不再丢失

Posted on 2019-12-17 15:08  SliverLee  阅读(433)  评论(0)    收藏  举报

语法:

mysqldump (选项) 

选项:

--add-drop-table :在每个创建数据表语句前添加删除数据库的语句  
--add-locks:备份数据库表时锁定数据库表  
--all-databases:备份mysql服务器上的所有数据库  
--comments:添加注释信息  
--compact:压缩模式,产生更少的输出  
--complete-insert:输出完成的插入语句  
--databases:指定要备份的数据库  
--default-character-set:指定默认字符集  
--force:当出现错误时仍然继续备份操作  
--host:指定要备份数据库的服务器  
--lock-tables:备份前,锁定所有数据库表  
--no-create-db:禁止生成创建数据库语句  
--no-create-info:禁止生成创建数据库语句  
--pasword:连接mysql服务器的密码  
--port:mysql服务器的端口号  
--user:连接mysql服务器的用户名 

 


 

1.备份全部数据库的数据和结构

mysqldump -uroot -p123456 -A >F:\all.sql

2.备份全部数据库的结构(加 -d 参数)

mysqldump -uroot -p123456 -A-d>F:\all_struct.sql

3.备份全部数据库的数据(加 -t 参数)

mysqldump -uroot -p123456 -A-t>F:\all_data.sql

4.备份单个数据库的数据和结构(,数据库名mydb)

mysqldump -uroot-p123456 mydb>F:\mydb.sql

5.备份单个数据库的结构

mysqldump -uroot -p123456 mydb-d>F:\mydb.sql

6.备份单个数据库的数据

mysqldump -uroot -p123456 mydb-t>F:\mydb.sql

7.备份多个表的数据和结构(数据,结构的单独备份方法与上同)

mysqldump -uroot -p123456 mydb t1 t2>f:\multables.sql

8.一次备份多个数据库

mysqldump -uroot -p123456 --databases db1 db2>f:\muldbs.sql

还原部分

1.还原全部数据库:



系统命令行: mysql -uroot -p123456 <f:\all.sql

2.还原单个数据库(需指定数据库)

(1) mysql>use mydb

mysql>source f:\mydb.sql

(2) mysql -uroot -p123456 mydb <f:\mydb.sql

3.还原单个数据库的多个表(需指定数据库)

(1) mysql>use mydb

mysql>source f:\multables.sql

(2) mysql -uroot -p123456 mydb<f:\multables.sql

4.还原多个数据库,(一个备份文件里有多个数据库的备份,此时不需要指定数据库)

(1) mysql命令行:mysql>source f:\muldbs.sql

(2) 系统命令行: mysql -uroot -p123456<f:\muldbs.sql

 

===============================================================分隔线=================================2020-06-08=========================

 

mysqlimport

--fields-terminated-by=字符串:设置字符串为字段之间的分隔符,可以为单个或多个字符。默认值为制表符“\t”。
-L, --local:表示从客户端任意路径读取文件导入表中,未设置该选项时,默认只从datadir下同名数据库目录下读取文件导入
--ignore-lines=n:表示可以忽略前n行。
-l, --lock-tables:写入时锁定所有表
-p, --password[=name]:指定用户密码
-u, --user=name:指定登入MySQL用户名
-h, --host=name:指定远程连接的服务器
-c, --columns=name:往表里导入指定字段,如:--columns='Name,Age,Gender'
-C, --compress:在客户端和服务器之间启用压缩传递所有信息

1、默认情况下,只能从指定/var/lib/mysql/目录  , --local选项,可以从本机任意路径导入数据

2、数据库存放表目录下同名文件导入表中,只需指定文件名即可

 

 CREATE TABLE `demo` (
  `times` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `pay` int(11) NOT NULL DEFAULT '0',
  `userid` int(11) NOT NULL DEFAULT '0',
  `guid` int(11) NOT NULL DEFAULT '0',
  `gameid` int(11) NOT NULL DEFAULT '0',
  `source` int(11) NOT NULL DEFAULT '0',
  KEY `times` (`times`),
  KEY `userid` (`userid`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8

执行sql语句导入

[root@192.168.138.150-mysql-master ~] # mysqlimport -ujumpwbx -pjumpbx -h192.168.138.150 -L test demo.csv --fields-terminated-by=","
 test.demo: Records: 3089 Deleted: 0 Skipped: 0 Warnings: 0



SELECT * FROM demo1
INTO OUTFILE "/root/demo.sql"
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';

 

fields子句:在FIELDS子句中有三个亚子句:TERMINATED BY、 [OPTIONALLY] ENCLOSED BY和ESCAPED BY。如果指定了FIELDS子句,则这三个亚子句中至少要指定一个。

(1)TERMINATED BY用来指定字段值之间的符号,例如,“TERMINATED BY ','”指定了逗号作为两个字段值之间的标志

(2)ENCLOSED BY子句用来指定包裹文件中字符值的符号,例如,“ENCLOSED BY ' " '”表示文件中字符值放在双引号之间,若加上关键字OPTIONALLY表示所有的值都放在双引号之间。

(3)ESCAPED BY子句用来指定转义字符,例如,“ESCAPED BY '*'”将“*”指定为转义字符,取代“\”,如空格将表示为“*N”。

lines子句:在LINES子句中使用TERMINATED BY指定一行结束的标志,如“LINES TERMINATED BY '?'”表示一行以“?”作为结束标志。(默认是\n,即换行分隔)

--------------------------------------------

  SELECT * FROM demo1 into outfile '/tmp/aaa0609.sql' FIELDS TERMINATED BY ',';

 

 

   比较顺利,顺利导出数据,以逗号分隔。

 

load data 

load data 一般和select xxx into outflie ' /path/xxx' ; 配合使用。

 LOAD DATA
    [LOW_PRIORITY | CONCURRENT] [LOCAL]
    INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [CHARACTER SET charset_name]
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
    [IGNORE number {LINES | ROWS}]
    [(col_name_or_user_var
        [, col_name_or_user_var] ...)]
    [SET col_name={expr | DEFAULT},
        [, col_name={expr | DEFAULT}] ...]

Local

  如果 load data 使用时指定了 local 关键字,则表示文件放在客户端主机上,从客户端读取文本文件;如果没指定,则表示从服务器主机读取文本文件

replace 和 ignore 关键字

  

1、replace 和 ignore 关键字用于控制与唯一键重复的记录的处理
2、如果指定 replace ,与唯一键重复的行将被覆盖更新。对于任意记录覆盖更新时,如果唯一键外的各个字段其实都没有变化,那么执行操作时受影响行数为1;如果除唯一键外的任意字段有变化,那么执行操作时受影响行数为2
3、如果指定 ignore ,与唯一键重复的行将被忽略,默认指定 ignore

 

mysql> desc demo1;
+------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| orderId | varchar(255) | YES | UNI | NULL | |
| payId | int(11) | YES | | 0 | |
| guid | varchar(255) | YES | | NULL | |
| accountUId | varchar(255) | YES | | NULL | |
| playerId | bigint(20) unsigned | NO | | 0 | |
| price | double | YES | | 0 | |
| channel | varchar(255) | YES | | NULL | |
| mode | varchar(255) | YES | | NULL | |
| argsinfo | text | YES | | NULL | |
| state | int(11) | YES | MUL | 0 | |
| createTime | datetime | YES | | NULL | |
| updateTime | datetime | YES | | NULL | |
+------------+---------------------+------+-----+---------+----------------+
13 rows in set (0.02 sec)

mysql> select * from demo1;
Empty set (0.00 sec)

 

==========================开始导入数据=========================

mysql> load data infile '/tmp/0609.sql' into table demo1;

 

 如果数据在服务器,可以不用local参数。