您的位置:首页 > 数据库 > MySQL

mysql数据库迁移整理笔记.md

2019-11-10 09:45 309 查看

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

mysql数据库迁移

数据库迁移包括数据迁移和用户创建及授权,数据迁移的时候需要考虑本身数据库容量大小,根据数据库容量的大小调整合适的迁移方案。

1.数据迁移

  • 1.容量500M以下 :采用navicat工具迁移,直接点击工具--->数据传输,具体参考navicat用户手册,这里不作过多说明。
  • 2.容量500M以上 :因为容量在500M左右,数据迁移的话时间大概要20分钟,所以超过500M,甚至达到几G的数据,我们可以把大的数据表剥离出来,进行单独导入。

如我们以35生产环境的californium库为例,经过sql语句查询,查询californium大概有1140.5M

select concat(round(sum(data_length/1024/1024),2),'M') as data from information_schema.tables where table_schema='californium';

经过分析我们知道californium库大表主要有这几个:t_logteststep,testcase,testcase_bak,testcase_exe_bak,testcase_execute,这里我们以大表t_logteststep为例。

1、从源库导出数据: 用root账号登录35数据库服务器,进行数据导出,这里我们用到mysq支持大数据表的导出SELECT INTO OUTFILE的用法。

[root@db2 mysqldump]# mysql

//开启缓存提高效率
mysql> SET SESSION BULK_INSERT_BUFFER_SIZE=256217728;
Query OK, 0 rows affected (0.08 sec)

mysql> SET SESSION MYISAM_SORT_BUFFER_SIZE=256217728;
Query OK, 0 rows affected (0.08 sec)

mysql> set global KEY_BUFFER_SIZE=256217728;
Query OK, 0 rows affected, 1 warning (0.10 sec)

//导出数据
mysql> SELECT * INTO OUTFILE '/home/mysqldata/mysqldump/t_logteststep' CHARACTER SET utf8 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM californium.t_logteststep;
Query OK, 1641328 rows affected (5 min 8.25 sec)

[root@db2 mysqldump]# ll -h
total 639M
-rw-rw-rw- 1 mysql mysql 639M Jul 16 19:56 t_logteststep

数据文件保存在服务器/home/mysqldata/mysqldump目录下,需要通过sftp工具下载到本地,如我本地目录/home/zhangyh/mysqldump

2、数据导入目标库: 在本地环境开启终端,先连接到需要导入的目标库地址。这里我们用到mysq支持大数据表的导出LOAD DATA INFILE的用法。

zhangyh@xiao-Travelsky:~$ mysql -h10.221.*.* -P3306 -uroot -p******

//开启缓存提高效率
mysql> SET SESSION BULK_INSERT_BUFFER_SIZE=256217728;
Query OK, 0 rows affected (0.08 sec)

mysql> SET SESSION MYISAM_SORT_BUFFER_SIZE=256217728;
Query OK, 0 rows affected (0.08 sec)

mysql> set global KEY_BUFFER_SIZE=256217728;
Query OK, 0 rows affected, 1 warning (0.10 sec)

mysql> use californium;

mysql> LOCK TABLES `t_logteststep` WRITE;
Query OK, 0 rows affected (0.08 sec)

//关闭索引更新提高效率
mysql> ALTER TABLE `t_logteststep` DISABLE KEYS;
Query OK, 0 rows affected, 1 warning (0.08 sec)

//导入数据
mysql> LOAD DATA local INFILE '/home/zhangyh/mysqldump/t_logteststep' INTO TABLE t_logteststep CHARACTER SET utf8 FIELDS TERMINATED BY ',' LINES TERMINATED BY  '\n' (stepid,stepname,type,runResult,comment,reason,stepTime,caseid,orderBy);
Query OK, 1641328 rows affected, 65535 warnings (2 min 55.26 sec)
Records: 1641328  Deleted: 0  Skipped: 0  Warnings: 3101237

//开启索引
mysql> ALTER TABLE `t_logteststep` ENABLE KEYS;
Query OK, 0 rows affected, 1 warning (0.15 sec)

mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.09 sec)

从上述数据表迁移来看,t_logteststep导出的数据640M,导出与导入的时间花费不到10分钟,可以很明显的提升迁移效率。

  1. 更多关于SELECT INTO OUTFILE的用法,请点击这里
  2. 更多关于LOAD DATA INFILE的用法,请点击这里
  • 3.容量500M以上 :执行mysqldump命令通过管道的方式进行迁移,节省IO的时间,注意这里在源库需要安装mysqldump工具。

这里我们同样以californium数据库进行迁移,首先需要在目标库创建一个新的空库,然后ssh登录源库服务器,执行mysqldump命令,迁移californium数据库到10.221.*.*目标库。

//目标库创建数据库
mysql> CREATE DATABASE `californium` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

//执行mysqldump命令,等待迁移完成
$ mysqldump -S /home/mysqldata/mysql/mysql.sock -uroot -xxx --opt californium| mysql -h10.221.*.* -P3306 -uroot -pxxx -C californium
  1. 更多关于mysqldump的用法,请点击这里

综上三种方式,第三种方式迁移效率最高!

2.用户创建及授权

//创建数据库
CREATE DATABASE `honeybee` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

//创建用户及授权
CREATE USER `honeybee`@`%` IDENTIFIED BY '******';

GRANT Alter, Alter Routine, Create, Create Routine, Create Temporary Tables, Create View, Delete, Drop, Event, Execute, Index, Insert, Lock Tables, References, Select, Show View, Trigger, Update ON `honeybee`.* TO `honeybee`@`%`;

//迁移完成之后源库删除用户
DROP USER `honeybee`@`%`;

至此,数据库迁移已完成.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Californium MySQL