mysql数据库迁移实战

1 使用mysqldump数据导出和source数据导入

注意:mysqldump命令要在dos窗口或者shell窗口,不需要登录进去数据库里面执行;source命令必须登录进去数据库里面执行;

1.1 mysqldump导出数据

  • 导出所有数据库(包括系统数据库)到指定文件下
mysqldump -u$$$ -p*** --all-databases > /root/all.sql

注:$$$为用户***为用户密码(最好回车后填写)命令后面没有任何标点符号
以下不在提示,本人使用root用户,密码为123456

  • 导出db1和db2两个数据库的所有数据
mysqldump -uroot -p123456 --databases db1 db2 > /root/db1_2.sql
  • 只导出表结构不导出数据:--no-data (或者 -d)
mysqldum -utoot -p123456 --no-data --database db1 > /root/db1_ddl.sql
  • 只导出表数据不导出表结构: -t
mysqldum -utoot -p123456 -t --database db1 > /root/db1_dml.sql
  • 跨服务器导出导入数据(可直接完成远程数据库迁移,适合数据不大的时候)
mysqldump --host=192.168.252.157 -uroot -p123456 -C --database db1 |mysql --host=192.168.252.159 -uroot -p123456 db1

或者

mysqldump -h192.168.252.157 -uroot -p123456 --deefault-character-set=utf8 -C --database db1 |mysql -h192.168.252.159 -uroot -p123456 db1

注意:加上-C参数可以启用压缩传递

1.2 source导入数据

source命令必须登录进去数据库里面执行;

  • 导入数据库
    登录进入mysql界面使用CREATE命令创建数据库后使用USE命令进入该数据库,然后再使用SOURCE命令即可导入数据库。
    注:如果sql文件中已经有数据库创建语句,则不用使用CREATE和USE命令

    例如:导入数据库db1
CREATE DATABASE db1;
USE db1;
SOURCE /root/dn1.sql;
  • 导入数据表
    登录进入mysql界面选择数据库使用SOURCE命令即可

2 使用拷贝data目录文件的方式迁移mysql数据库

其实迁移数据库,一般用sql文件就行,把A服务器数据库的表结构和数据等等导出,然后导入到B服务器数据库,但是如果数据文件过大,好几十个G的数据,使用命令行导入,效果不是很好,经常在执行过程中报错、卡死。
步骤如下:

2.1 首先要确定data目录在哪里

其实是拷贝mysql的数据存放路径,Linux默认路径为:/var/lib/mysql/
也可以使用命令来查找data目录:

mysql> show global variables like "%datadir%"; 

+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.00 sec)
mysql>

2.2.需要拷贝的文件包括:数据库文件 和** ibdata1 (这个必须拷贝)**

1.png

2.3.停掉mysql服务,将拷贝的文件复制到目标数据库的data目录中

拷贝源数据库文件ibdta1到目标数据库的data目录中

[root@localhost mysql]# scp -r 数据库文件 root@192.168.252.159:/var/lib/mysq
[root@localhost mysql]# scp -r ibdata1 root@192.168.252.159:/var/lib/mysql

到目标数据库服务器:

[root@localhost mysql]# chown -R mysql:mysql financial/ [root@localhost mysql]# chmod -R 755 financial/

如果没有进行上面授权会出现如下错误:


2.png

3.png

2.4 复制好后,启动mysql服务,用数据库连接工具连接数据库即可看到导进来的数据库

  • mysql5.7启动命令
    systemctl start mysqld.service

  • mysql5.6启动命令
    service mysql start

    注意:如果目标数据库原有数据库,当从源数据库拷贝**ibdta1到目标数据库后,目标数据库原有的数据库会出现异常:包括删除该数据库报错、操作数据库时候异常:[ERR] 1813 - Tablespace 'yzy_test.admin_user' exists.
    所以,在拷贝数据库文件 和 ibdata1 到目标数据库前最好先备份好原有的数据库,然后drop掉这些原有的数据库,当从源数据库拷贝数据库文件和 ibdata1 到目标数据库后,确保没有任何异常后再从目标数据库中重新创建这些原有的数据库,最后还原回来,尽可能做到万无一失。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容