MYSQL导出数据

导出数据

  1. 备份数据
复制代码
[root@sf105113 bin]# mysqldump -h127.0.0.1 -P3306 -uroot -p --add-locks -q dbname > dbname.sql  
//参数依次为:-h 主机 -p 端口 -u 用户名 -p 密码 --add-locks:导出过程中锁定表,完成后回解锁。
-q:不缓冲查询,直接导出至标准输出

2. 只导出数据库表结构

复制代码
[root@sf105113 bin]# mysqldump -h127.0.0.1 -P3306 -uroot -p--add-locks -q -d dbname > dbname.sql 
//-d:只导出表结构,不含数据 
  1. 只导出数据
复制代码
[root@sf105113 bin]#  mysqldump -h127.0.0.1 -P3306 -uroot -ppassword --add-locks -q -t dbname.user > dbname.sql  
//-t:只导出表数据,不含结构

1.只导出表结构 不导出数据

mysqldump --opt -d 数据库名 -u root -p -h 地址> xxx.sql

2.只导出数据 不导出表结构

mysqldump -t 数据库名 -u root -p -h 地址 > xxx.sql

复制代码
mysqldump -u${user} -p${passwd} --no-create-info --database ${dbname} --table ${tablename} > ${tablename}.sql

或者

复制代码
mysqldump -u${user} -p${passwd} -t ${dbname} > ${dbname}.sql

3.导出数据和表结构

mysqldump datang-highSpeed -u root -p -h 地 > datang-highSpeed.sql

mysqldump datang-highspeed -u root -p > datang-highSpeed.sql

4.导出特定表结构

mysqldump -u root -p -h 地址 -B 数据库名 --table 表名 > xxx.sql

5.导入mysql数据

mysql -u root -p 数据库名 < xxx.sql

导出表

mysqldump -u 账号 -p -h 连接地址 -P 端口 数据库名称 xx表 > xxx.sql

导入表

mysql -u 账号 -p -h 连接地址 -P 端口 数据库名称 < ./xxx.sql

Doris1.0支持mysqldump工具导出表结构和数据。

导出test数据库中的students表:mysqldump -h127.0.0.1 -P 9030 -uroot --no-tablespaces --databases test --tables students > students2.sql

导出test数据库中的students表结构:mysqldump -h127.0.0.1 -P 9030 -uroot --no-tablespaces --databases test --tables students --no-data > students2.sql

导出test库中所有的表:mysqldump -h127.0.0.1 -P 9030 -uroot --no-tablespaces --databases test

导出所有数据库和表:mysqldump -h127.0.0.1 -P 9030 -uroot --no-tablespaces --all-databases

导出的sql文件可以source命令导入Doris中

一、 导出

导出用户需要有导出对象的权限,例如导出表要有select权限、导出视图要有show view权限、导出触发器要有trigger权限、需要锁表时要有lock tables权限等。

如果dump文件中包含了GTID信息,则无法导入到未启用GTID的数据库(低于5.6.9版本的数据库不支持GTID,因此也无法导入到这些库中)。

1. db级

导出所有db结构和数据

mysqldump -uroot -p -A > /data/bak/all.sql

仅导出所有db结构

mysqldump -uroot -p -A -d > /data/bak/all_struct.sql

仅导出所有db数据不导表结构

mysqldump -uroot -p -A -t > /data/bak/all_data.sql

导出单个db结构和数据

mysqldump -uroot -p mydb > /data/bak/mydb.sql

仅导出单个db结构

mysqldump -uroot -p mydb -d > /data/bak/mydb.sql

仅导出单个db数据

mysqldump -uroot -p mydb -t > /data/bak/mydb.sql

导出多个db结构和数据(--databases参数,数据,结构单独导出方法同上)

mysqldump -uroot -p --databases db1 db2 > /data/bak/muldbs.sql

2. 表级

导出指定db某张表结构及数据(数据,结构单独导出方法同上)

mysqldump -uroot -p dbname test > db.sql

导出指定db中多张表(test1,test2,test3)结构及数据

mysqldump -uroot -p dbname test1 test2 test3 > db.sql

排除部分表,导出DB中其余表结构和数据

mysqldump -uroot -p mydb --ignore-table=mydb.test1 --ignore-table=mydb.test2 > /data/bak/mydb.sql

指定where条件导出表的部分数据

mysqldump -uroot -w "id=6032" -p db_name tbl_name > /tmp/where.sql

3. 主要导出参数

  • --all-databases, -A:导出所有数据库
  • --databases, -B:导出多个数据库。不使用该选项时,mysqldump把第一个名字参数作为db名,后面的作为表名;使用该选项时,则把每个名字都当作为db名。
  • default-character-set:指定默认字符集,不指定默认为UTF-8
  • --force, -f:即使发现sql错误,仍然继续导出
  • --no-data, -d:只导出表结构
  • --port=port_num, -P port_num:端口号
  • --quick, -q:强制mysqldump从服务器每次查询一行数据而不是查询整个表。避免大表导出时查询刷爆内存且热点数据被刷出缓冲池,通常建议总是启用该选项。
  • --tables:覆盖 --databases or -B选项,后面所跟参数被视作表名
  • --tab=path(-T path):产生TAB分割的数据文件,为每张表建一个包含create table语句的tabname.sql和一个包含数据的tabname.txt文件
  • --xml, -X:导出为xml文件
  • --single-transaction:导出开始前先执行start transaction命令,导出时不锁表,仅支持InnoDB存储引擎,需要确保导出时无DDL操作
  • --lock-tables(-l):导出过程中依次锁住每个schema下所有表(只能保证各schema下表导出的一致性),被锁的表只能读,MyISAM存储引擎常用
  • --lock-all-tables(-x):导出过程中锁住所有schema下所有表,避免前面参数无法保证所有schema下表导出的一致性的问题,但是所有表都变为只读
  • --master-data=[value] 主要用于建从库。value=1时,dump文件包含change master语句,导入时自动执行;value=2时,change master语句被注释,需手动执行。--master-data会忽略--lock-tables选项,如果不加--single-transaction选项会自动使用--lock-all-tables
  • --where(-w):指定导出条件
  • --events(-E):导出事件调度器
  • --routines(-R):导出存储过程和函数
  • --triggers:导出触发器
  • --hex-blob:将binary,varbinary,blog,bit列类型导出为16进制格式

二、 导入

导入用户需要有执行备份文件中语句的权限(ddl、dml等)。

1. 常用导入方法

  • 系统命令行方法

mysql -uroot -p < test_backup.sql

  • mysql命令行source方法

mysql -uroot -p

source /home/mysql/test_backup.sql

2. 导入示例

导入所有数据库

  • mysql命令行:mysql>source /data/bak/all.sql
  • 系统命令行: mysql -uroot -p123456 < /data/bak/all.sql

导入单个数据库

  • mysql命令行:

mysql>use mydb

mysql>source /data/bak/mydb.sql

  • 系统命令行:

mysql -uroot -p123456 mydb < /data/bak/mydb.sql

导入单个数据库的多个表

  • mysql命令行:

mysql>use mydb

mysql>source /data/bak/multables.sql

  • 系统命令行:

mysql -uroot -p123456 mydb < /data/bak/multables.sql

导入多个数据库(一个备份文件里有多个数据库的备份,此时不需要指定数据库)

  • mysql命令行:

mysql>source /data/bak/muldbs.sql

  • 系统命令行:

mysql -uroot -p123456 < /data/bak/muldbs.sql

三、 拼出部分对象创建语句

有时将数据库迁移新环境时,业务方会要求修改新库库名和用户名,如果源库中有视图,存储过程、函数、触发器、事件等对象,导入时会遇到问题,因为这些对象definer中可能会写明了用户,创建语句中指定了库名。

这种情况下,可以先做一次全量导入,然后删掉这些问题对象,再分别用导入创建语句的方式导入这些对象。

1. 导出视图创建语句

创建视图的时候一般会带上库名和definer的定义,如果迁移数据时,目标库的库名、用户名和源库的不一样,则视图迁移会失败。 如果遇到这种情况,需要分2步导出,第1步迁移表数据,第2步迁移视图。

  • 查询出要导的库的全部表

    select table_name from information_schema.tables where table_schema='mytest' and table_type!='view';

  • 查询之后,用notepad++替换掉| 和\r 回车,然后mysqldump命令导出

    mysqldump --set-gtid-purged=OFF -uroot -p --single-transaction -R --triggers --events --max_allowed_packet=1G mytest T1 T2 T3 T4

  • 导出视图

    SELECT CONCAT("CREATE VIEW ",TABLE_NAME," as ",VIEW_DEFINITION,";") FROM information_schema.VIEWS where table_schema='mytest';

  • 如果是同名库的导出可以用下面的语句

    SELECT CONCAT("DROP VIEW IF EXISTS ",TABLE_SCHEMA,".",TABLE_NAME,";\nCREATE VIEW ", TABLE_SCHEMA,".",TABLE_NAME," as ",VIEW_DEFINITION,";") FROM information_schema.VIEWS where table_schema='mytest';

2. 导出其他对象

一般情况下,-R --triggers --events 可以正常导出存储过程、函数、触发器等信息,但是如果创建的时候也写了definer和库名,需要用下面的方式导出。

--查看存储过程
select routine_name,routine_type from information_schema.routines where routine_schema='mytest' and routine_type='PROCEDURE';--查看函数
select routine_name,routine_type from information_schema.routines where routine_schema='mytest' and  routine_type='FUNCTION';--查看触发器
select trigger_name from information_schema.triggers where trigger_schema='mytest';--查看事件
select event_name from information_schema.events where event_schema='mytest';

导出存储过程和函数

SELECT CONCAT("DROP ",TYPE," IF EXISTS `",db,"`.`", NAME,"`;\nDELIMITER ;;\nCREATE ",TYPE," `",db,"`.`",NAME,"`(", param_list,") ",IF ( TYPE = "FUNCTION", CONCAT ("RETURNS ", RETURNS, "\n"),"\n"), body_utf8,";;\nDELIMITER ;") FROM  mysql.proc;

导出触发器

SELECT CONCAT("DROP TRIGGER IF EXISTS `",TRIGGER_SCHEMA, "`.`", TRIGGER_NAME,"`;\nDELIMITER ;;\nCREATE TRIGGER `",TRIGGER_SCHEMA,"`.`",TRIGGER_NAME,"` ",ACTION_TIMING," ",EVENT_MANIPULATION," ON `",EVENT_OBJECT_SCHEMA,"`.`",EVENT_OBJECT_TABLE,"` FOR EACH ROW\n",ACTION_STATEMENT,";;\nDELIMITER ;") FROM information_schema.TRIGGERS;

导出事件

SELECT  CONCAT(   "DROP EVENT IF EXISTS `",   EVENT_SCHEMA,   "`.`",   EVENT_NAME,   "`;\nDELIMITER ;;\nCREATE EVENT `",   EVENT_SCHEMA,   "`.`",   EVENT_NAME,   "` ON SCHEDULE EVERY ",   INTERVAL_VALUE,   " ",   INTERVAL_FIELD,   " STARTS '",   STARTS,"'",   IF ( ENDS <>NULL, CONCAT (" ENDS '",ENDS,"'"),""),     " ON COMPLETION ",   ON_COMPLETION,   " ENABLE DO ",   EVENT_DEFINITION,   ";;\nDELIMITER ;"  ) FROM  information_schema.events;
1.备份数据库
复制代码
#mysqldump --opt -d 数据库名 -u root -p > xxx.sql 
#mysqldump DB_NAME >数据库备份名 
#mysqldump -A -uUSER_NAME -pPASSWORD DB_NAME>数据库备份名 
#mysqldump -d -A --add-drop-table -uroot -p >xxx.sql 
2.导出结构不导出数据
复制代码
mysqldump --opt -d 数据库名 -u root -p > xxx.sql
3.导出数据不导出结构
复制代码
mysqldump -t 数据库名 -uroot -p > xxx.sql
4.导出数据和表结构
复制代码
mysqldump  -uroot -p 数据库名 > xxx.sql
5.导出特定表的结构
复制代码
mysqldump -uroot -p -B 数据库名 --table 表名 > xxx.sql
6.导入数据

mysqldump导出的是完整的SQL语句,所以用mysql客户程序就能把数据导入.

复制代码
#mysql 数据库名 < 文件名 
或者
#source /tmp/xxx.sql
相关推荐
qq_5298353528 分钟前
对计算机中缓存的理解和使用Redis作为缓存
数据库·redis·缓存
月光水岸New3 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6753 小时前
数据库基础1
数据库
我爱松子鱼3 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo3 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser4 小时前
【SQL】多表查询案例
数据库·sql
Galeoto4 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)5 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231115 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql
喝醉酒的小白5 小时前
PostgreSQL:更新字段慢
数据库·postgresql