mysql复制表,可通过如下方式操作:
1.insert…select语句
使用如 insert into table1 select * from table2格式的语句,可以从表table2中拷贝一份数据插入表table2,要求表字段一致。
2.create table …select * from …
如果table1之前不存在,则使用create table1 as select * from table2,则可复制table2的表字段和数据。但不会复制自增主键以及索引信息。
3.create table like… insert
如果想向上一步一样,在复制一张表的同时将其自增主键和索引等信息一并复制,
可使用
create table1 like table2;
insert into table1 select * from table2。
mysql备份表,可通过如下方式操作:
1.mysqldump
有时备份数据需将表的结构及数据导出成文件备份,则可使用mysqldump备份
如下:
mysqldump -h127.0.0.1 -P3306 -uroot -p123 table > '/tmp/table.sql'
mysqldump还有一些常用的配置常数,以供不同的使用场景使用:
- –single-transaction
在导出数据的时候不需要对表加表锁 ; - —add-locks
设置为 0,表示在输出的文件结果里,不增加" LOCK TABLES t WRITE;"; - –no-create-info
不需要导出表结构 ; - –set-gtid-purged=off
不输出跟 GTID有关的信息;
导出的备份文件table.sql,可用来恢复表。使用如下:
mysqldump -h127.0.0.1 -P3306 -uroot -p123 dbName -e "source /tmp/table.sql"
2.导出到csv文件
除了导出为sql文件外还可以导出到csv文件,使用命令:
select * from table into outfile '/tmp/table.csv'
使用该命令会生成csv文件保存在mysql服务端,如果当前操作的命令段和mysql服务端不在同台机上,则当前机器目录不会生成csv文件。且文件生成位置受secure_file_priv限制,其值若为empty则不限制生成位置,若为一个路径字符串,则只可保存到该路径。若为NULL,则禁止使用into outfile命令备份。
使用时要注意tmp目录下没有table命名的csv文件,否则会报错。
加载csv文件
使用备份csv文件,将数据写入表,如下:
load data infile '/tmp/table.csv' into table table1
该命令使用的时服务端上的tmp目录文件,如果加上local,则可用命令客户端目录下的文件,实际上使用local就是将本地csv文件发送到服务端再执行。
需要注意的时select… into outfile不会保存表结构,只导出数据。