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 (这个必须拷贝)**
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.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 到目标数据库后,确保没有任何异常后再从目标数据库中重新创建这些原有的数据库,最后还原回来,尽可能做到万无一失。