暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysqldump 导出文本文件

原创 huayumicheng 2022-12-13
928

1、创建相关账号

create user backup@'%' identified with mysql_native_password by '123456';
grant select,reload,process,lock tables,replication client,replication_slave_admin,show view,show_routine,trigger,event,file on *.* to backup@'%';
flush privileges;


select:			备份表数据
show view:   	备份试图
trigger:        备份触发器
lock tables:    没有使用--single-transaction
process:		没有使用 --no-tablespaces
reload:		备份前刷新mysql日志文件
super、replication_client:使用--master-data记录点位信息,需要执行show master status
super、replication_slave_admin: 使用了--dump-slave (要执行 stop slave sql_thread)
show_routine:     备份存储过程#8.0.20 新增
eventevent事件
file:   导出文本文件



mysql> create user apply_log@'%' identified by '123456';
mysql> grant super,system_variables_admin,drop,create,insert,alter,file on *.* to apply_log@'%';
mysql> flush privileges;
mysql> exit

2、导出文本数据

-T, --tab=name      Create tab-separated textfile for each table to given path. (Create .sql and .txt files.) NOTE: This only works if mysqldump is run on the same machine as the mysqld server.

--限制:mysqldump和mysql server必须在同一台服务器


--fields-terminated-by=str:隔开字段的字符,默认为tab制表符。
--fields-enclosed-by=char:包裹字段的符号(包裹所有字段),默认没有符号。
--fields-optionally-enclosed-by=char:包裹字段的符号(包裹除数字类型之外的所有字段),默认没有符号。
--fields-escaped-by=char:指定字符对特殊字符进行转义,例如--fields-enclosed-by指定为双引号,而字段内容包含双引号,就需要一个字符如#或其他,对字段内的双引号进行转义。
--lines-terminated-by=str:一行的终止,默认为换行符。



--导出文本文件
mysqldump -ubackup -p123456 -h192.168.100.82 -P3306 --set-gtid-purged=OFF  -q --single-transaction --tab=/data/mysql/3306/tmp/ test t1 --fields-terminated-by=, --fields-enclosed-by='"' 




[root@mysql2 ~]# tree /data/mysql/3306/tmp/                       
/data/mysql/3306/tmp/
├── t1.sql
└── t1.txt

0 directories, 2 files
[root@mysql2 ~]# egrep -v '^$|^/|^--' /data/mysql/3306/tmp/t1.sql 
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `row_create_time` datetime DEFAULT CURRENT_TIMESTAMP,
  `row_lastupdate_time` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
[root@mysql2 ~]# cat /data/mysql/3306/tmp/t1.txt 
"1","2022-12-11 20:31:24","2022-12-11 20:31:24"
"2","2022-12-11 20:31:25","2022-12-11 20:31:25"

3、mysqlimport导入文本文件

--新建临时表t2 
mysql> use test
mysql> create table t2 like t1;

--将t1.txt 复制一份t2.txt ,或者重命名为t2 
[root@mysql2 ~]# cd /data/mysql/3306/tmp/
[root@mysql2 tmp]# cp -a t1.txt t2.txt

mysqlimport -uapply_log -p123456 -h192.168.100.82 -P3306 --fields-terminated-by=',' --fields-enclosed-by='"'  test /data/mysql/3306/tmp/t2.txt

--load data 参数

character set utf8	字符集utf8,防止中文乱码,需要放在fields前面,否则报错
fields	域,后面常用字段有terminated/optionally/escaped
terminated by 'string'	设置字段数据之间的分隔符,如最常用的分隔符0x0f
optionally enclosed by 'char'	设置字段非数值的数据,使用什么符号引起,如英文双引号"
escaped by 'char'	字段数据存在特殊符号使用的转移符,默认是反斜杠\,如还可以指定为双引号"
lines	设置每条记录的开头starting和结尾字符terminated
lines starting by 'char'	设置每条记录的开头字符,默认空字符串''
lines terminated by 'char'	设置每条记录的结尾字符默认换行符'\n'



--开启客户端导入参数
mysql> set global local_infile=on;


--导入数据,登录的时候也需要开启 --local-infile=1
	
mysql -uapply_log -p123456 -h192.168.100.82 -P3306 --local-infile=1


load data local infile '/data/mysql/3306/tmp/t2.txt' into table t2 fields
terminated by ','  enclosed by '"' lines terminated by '\n'
(@id, @row_create_time, @row_lastupdate_time) set row_create_time=date_format(@row_create_time, '%Y-%m-%d %H:%i:%s'), row_lastupdate_time=date_format(@row_lastupdate_time, '%Y-%m-%d %H:%i:%s');	


4、select info outfile

character set utf8	字符集utf8,防止中文乱码,需要放在fields前面,否则报错
fields	域,后面常用字段有terminated/optionally/escaped
terminated by 'string'	设置字段数据之间的分隔符,如最常用的分隔符0x0f
optionally enclosed by 'char'	设置字段非数值的数据,使用什么符号引起,如英文双引号"
escaped by 'char'	字段数据存在特殊符号使用的转移符,默认是反斜杠\,如还可以指定为双引号"
lines	设置每条记录的开头starting和结尾字符terminated
lines starting by 'char'	设置每条记录的开头字符,默认空字符串''
lines terminated by 'char'	设置每条记录的结尾字符默认换行符'\n'




mysql -ubackup -p123456 -h192.168.100.82 -P3306 

select * from test.t2 into outfile '/data/mysql/3306/tmp/t2.txt' character set utf8 fields terminated by ',' optionally enclosed by '"' escaped by '"'  lines terminated by '\n';

--查看导出的文件

[root@mysql2 ~]# cat /data/mysql/3306/tmp/t2.txt
1,"2022-12-11 20:31:24","2022-12-11 20:31:24"
2,"2022-12-11 20:31:25","2022-12-11 20:31:25"


--导入数据
mysql -uapply_log -p123456 -h192.168.100.82 -P3306 --local-infile=1


load data local infile '/data/mysql/3306/tmp/t2.txt' into table t2 fields
terminated by ','  enclosed by '"' lines terminated by '\n'
(@id, @row_create_time, @row_lastupdate_time) set row_create_time=date_format(@row_create_time, '%Y-%m-%d %H:%i:%s'), row_lastupdate_time=date_format(@row_lastupdate_time, '%Y-%m-%d %H:%i:%s');



--csv文件也可以使用如下方法导入,导入的时候注意编码
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论