mysql数据分库分表,迁移,表字段复制,分区(整理中)
数据迁移
一、导出
命令行下具体用法如下:
mysqldump -h host -u uname -p pwd dbname > dump.sql #导出整个数据库结构和数据
mysqldump -h host -u uname -p pwd -d dbname > dump.sql #导出整个数据库结构(不包含数据)
mysqldump -h host -u uname -p pwd dbname tbname > dump.sql #导出单个表结构和数据
mysqldump -h host -u uname -p pwd -d dbname tbname > dump.sql #导出单个表结构(不包含数据)
二、导入
mysql -u用户名 -p密码 < 要导入的数据库数据(runoob.sql)
mysql -uroot -p123456 < runoob.sql
mysql(分布式,分库分表,sql)
自动分库:比较复杂
1,分库依据:体现在库名上 2,初始化:获取一份数据库sql文件, mysqldump -h host -u uname -p pwd -d dbname > dump.sql 3,sql文件关键变量抽取 4,替换sql文件中的变量,正则匹配 5,执行sql文件
自动分表:相对简单
1,分表依据:体现在表名上 2,自动判断存在性 3,自动创建表:建表sql mysqldump -h host -u uname -p pwd -d dbname tbname > dump.sql 4,自动获取表
表复制
#复制表结构及数据到新表(不包含主键、索引、分区等) create table A_1 select * from A #只复制表结构到新表1 create table A_1 select * from A where 1=2; #只复制表结构到新表2 create table A_1 like A; #这种方式的复制可以复制旧表的主键、索引、Extra(auto_increment,字符集编码及排序)、注释、分区等属性。但是不包含触发器、外键等 #复制表数据到新表(A_1必须存在) insert into A_1 select * from A;#全部字段 insert into A_1 (col1,col2,...) select col1,col2,... from A;#指定字段 #完整复制 show create table A;#将旧表的创建命令列出 #我们只需要将该命令拷贝出来,更改table的名字,就可以建立一个完全一样的表
字段复制
1 不同表复制
update B set extra = A.extra from A join B on (A.id = B.id);
update B inner join A on A.id = B.id set B.content = A.content[,A.extra = B.extra];
update B set B.sms = (select A.sms from A where A.id = B.id)
2 同表复制
update B set col1 = col2;
分区
参考:https://zhuanlan.zhihu.com/p/373202129