Mysql 小手册

表操作

Posted by luoruiqing on January 1, 1999

拷贝库

mysqldbcopy

可以将整个库完整的clone出来,包括表,关联关系,索引,视图,触发器,事件过程等等。

1
2
3
4
# 可能需要安装
# apt-get install mysql-utilities
# mysqldbcopy --source=<来源库地址> --destination=<目标库地址> <来源库名称>:<目标库名称>
mysqldbcopy --source=root:password@localhost:port --destination=root:password@localhost:port db_from:db_to

mysqldump (避免磁盘IO)

1
2
3
4
# 提前创建好数据库
# echo "CREATE DATABASE new_db" | mysql -u <用户名> -p # mysqladmin -u root -p create new_db
# mysqldump -u <用户名> --password=<密码> <来源库名称> | mysql -u <用户名> --password=<密码> <目标库名称>
mysqldump -u root --password=123456 <original_db> | mysql -u root --password=123456 <new_db>

同库拷贝表

复制表结构

1
2
CREATE TABLE '新表' SELECT * FROM '旧表' WHERE 1=2;
SELECT * INTO '新表' FROM '旧表' WHERE 1=2;

复制表结构及数据

1
2
3
CREATE TABLE '新表' LIKE '旧表'; 
SELECT * INTO '新表' FROM '旧表'; 
CREATE TABLE '新表' SELECT * FROM '旧表'; -- ! 这种方式复制的表可能没有`主键`

获取建表语句

1
2
SHOW CREATE TABLE '旧表';
INSERT INTO '新表' SELECT * FROM '旧表';

复制全部数据

1
INSERT INTO '新表' SELECT * FROM '旧表';

复制部分数据

1
2
INSERT INTO '新表' SELECT * FROM '旧表' WHERE 条件;
INSERT INTO '新表'('字段1', '字段2',.......) SELECT '字段1', '字段2', ...... FROM '旧表';

跨库拷贝表

全复制

1
INSERT INTO DB2.TABLE2 SELECT * FROM DB1.TABLE1; 

去重复制

1
INSERT INTO DB2.TABLE2 SELECT DISTINCT * FROM DB1.TABLE1;

条数复制

1
INSERT INTO DB2.TABLE2 SELECT TOP 条数 * FROM DB1.TABLE1;

mysqldump 样例

  • -d 只导出结构
  • -t 只导出数据
  • --databases 指定多个库
  • --tables 指定多个表

只导出结构

1
mysqldump -d 库名 表名 > 结构.sql

只导出数据

1
mysqldump -d 库名 表名 > 数据.sql

导出指定表

1
mysqldump --databases 库名 --tables 表1 表2 > 表1_表2.sql

导出指定库

1
mysqldump --databases 库1 库2 > 库1_库2.sql

导出所有数据库

1
mysqldump --all-databases > 所有数据库.sql

Shell 导入

1
mysql 连接参数 < 文件.sql

SQL 导入

1
2
USE test;
SOURCE ./文件.sql;