拷贝库
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 导入
SQL 导入
1
2
| USE test;
SOURCE ./文件.sql;
|