背景:之前在做一个网站,最开始是在windows上写代码,数据库也在本地,后来要把网站发布到linux server上,于是需要把数据库也迁移过去。网上也找了一些方法,最后通过mysqldump实现了。(项目的数据库基于mysql,因此该方式仅限于mysql)
mysql的安装目录下有个data文件,里面存放着数据库以及其中表的数据,首先将本地的mysql下的一个数据库(假设为abc)导出,到处为abc.sql,可以存放在任意位置。
- windows在cmd中输入:
mysqldump -u USERNAME -p --database abc > D:abc.sql
上面我将数据库abc中的数据导出到了D盘下的abc.sql
下面需要将abc.sql传输到linux server上去,可以通过ssh,或者放在web上通过wget下载等。
- abc.sql放到linux上之后,再通过mysqldump进行恢复:
mysqldump -u USERNAME -p --database abc < /PATH_TO _abc.sql/abc.sql
以上需要将PATH_TO _abc.sql替换为存放abc.sql的路径。
以上过程可能会报错,具体为:
ERROR 6 (HY000) at line 30: Error on delete of './abc/abc_table.frm' (Errcode: 13)
这是有关权限的报错,可以试着将linux mysql下的abc数据库数据文件夹权限设置为777:
chmod 777 /var/lib/mysql/abc
如果还有此类错误,可以将abc.sql以及mysql的权限设置为777(此行为仅仅用于测试,在正式使用时全部设置为777还是有点不安全的)。
- 下面就在linux下测试一下是否能正常使用mysql命令:
mysql -u USERNAME -p
show databases;
use abc;
show tables;
(假设abc中有张表abc_table)
select * from abc_table
(可以根据表的内容调整select的内容)
如果能正常显示,表示数据库迁移成功。
在用mysqldump之前,我曾经尝试直接将数据库文件夹复制到linux下,虽然在实际测试时可以显示数据库和表,但在select时是找不到内容的,后来在网上看到需要将ibdata1 这个文件拷过去,但做完了以后也没用,后来索性就用mysqldump备份。