在Linux系统下,MySQL的数据库文件缺省存放在/var/lib/mysql中,其中的文件列表如下:

 rw-rw---- 1 mysql mysql        5 2012-05-07 22:00 clin-laptop.pid
 rw-r--r-- 1 root  root         0 2012-05-07 22:00 debian-5.1.flag
 rw-rw---- 1 mysql mysql 10485760 2012-05-07 22:00 ibdata1
 rw-rw---- 1 mysql mysql  5242880 2012-05-07 22:00 ib_logfile0
 rw-rw---- 1 mysql mysql  5242880 2012-05-07 22:00 ib_logfile1
drwx------ 2 mysql root      4096 2012-05-07 22:00 mysql
 rw-rw---- 1 root  root         6 2012-05-07 22:00 mysql_upgrade_info
drwx------ 2 mysql mysql     4096 2012-05-08 21:41 phpmyadmin 

可以看出,其中有两个数据库文件夹:mysql文件夹对应mysql系统使用的数据库,phpmyadmin对应的是自有数据库。与数据库有关的所有文件都位于这些文件夹中,因此,原则上讲,只要将这些文件夹下的所有文件导出并拷贝到其他MySQL服务器对应的位置,即可完成数据库的迁移,但拷贝的过程中需要注意不得改变数据库文件夹及其中的数据库文件的权限。

另外一个问题是如何改变数据库文件的缺省位置,因为/var/lib/mysql往往位于系统所在的分区,系统崩溃可能会导致数据库损坏,所以最好将缺省的数据库文件夹置于独立的分区中,这样的话更有利于数据库的安全。可以通过在启动mysql时设置datadir参数来达到这一目的:

$mysqld --user=mysql --datadir=/mydatadir/mysql &

也可以通过修改/etc/mysql/my.conf配置文件中的datadir来完成。

仍然要注意权限问题,这里不得不提到apparmor:这是一种Linux Kernel提供的基于应用程序profile的权限控制方法。如果启动mysql的时候遇到如下错误:

[Warning] Can't create test file /mydatadir/mysql/mypc-00.lower-test

且系统日志中有如下类似信息:

[ 8232.324109] type=1400 audit(1314483729.470:59): apparmor="DENIED" operation="mknod" parent=1 profile="/usr/sbin/mysqld" name="/mydatadir/mysql/mypc-00.lower-test" pid=30379 
comm="mysqld" requested_mask="c" denied_mask="c" fsuid=0 ouid=0

则需要解决apparmor的配置问题:打开文件/etc/apparmor.d/usr.sbin.mysqld,为/mydatadir/mysql添加相应的权限,重新启动apparmor服务。

如果使用SELinux,很可能会碰到类似的问题,也必然会有类似的解决方案。

 
如何迁移mysql数据库.txt · Last modified: 2014/11/10 07:14 (external edit)
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki