linux下迁移mysql数据文件
mysql数据文件的介绍:
mysql数据库文件包括MySQL所建数据库文件和MySQL所用存储引擎创建的数据库文件。
1、MySQL创建并管理的数据库文件:
.frm文件:存储数据表的框架结构,文件名与表名相同,每个表对应一个同名frm文件,与操作系统和存储引擎无关,即不管MySQL运行在何种操作系统上,使用何种存储引擎,都有这个文件。
除了必有的.frm文件,根据MySQL所使用的存储引擎的不同(MySQL常用的两个存储引擎是MyISAM和InnoDB),存储引擎会创建各自不同的数据库文件。
2、MyISAM数据库表文件:
.MYD文件:即MY Data,表数据文件
.MYI文件:即MY Index,索引文件
.log文件:日志文件
3、InnoDB采用表空间(tablespace)来管理数据,存储表数据和索引,
InnoDB数据库文件(即InnoDB文件集,ib-file set):
ibdata1、ibdata2等:系统表空间文件,存储InnoDB系统信息和用户数据库表数据和索引,所有表共用
.ibd文件:单表表空间文件,每个表使用一个表空间文件(file per table),存放用户数据库表数据和索引
日志文件: ib_logfile1、ib_logfile2
二、MySQL数据库存放位置:
1、MySQL如果使用MyISAM存储引擎,数据库文件类型就包括.frm、.MYD、.MYI,默认存放位置是C:\Documentsand Settings\All Users\Application Data\MySQL\MySQL Server 5.1\data
2、MySQL如果使用InnoDB存储引擎,数据库文件类型就包括.frm、ibdata1、.ibd,存放位置有两个,
.frm文件默认存放位置是C:\Documents and Settings\All Users\ApplicationData\MySQL\MySQL Server 5.1\data,ibdata1、.ibd文件默认存放位置是MySQL安装目录下的data文件夹
实现思路:移动数据目录,更改配置文件
需求:新加了一个硬盘,想把MySQL数据库目录放到新的硬盘里面。
服务器环境:新硬盘挂载点为/var/local,系统是Ubuntu 14.04 LTS,MySQL使用默认命令安装。
$sudo apt-get install mysql-server mysql-client #MySQL安装命令
步骤重现:
停止MySQL服务
$sudo service mysql stop #停止MySQL服务
移动MySQL数据文件存放目录
$sudo mv /var/lib/mysql/ /var/local/ #数据文件默认位置是/var/lib/mysql/
更改MySQL配置文件my.cnf
$sudo vi /etc/mysql/my.cnf #编辑配置文件
datadir = /var/lib/mysql
改为
datadir = /var/local/mysql
启动MySQL服务
$sudo service mysql start #启动MySQL服务
start: Job failed to start
重启失败!于是决定去查看日志,一探究竟。
$tail /var/log/mysql/error.log #编辑查看错误日志
140728 16:29:09 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
140728 16:29:09 [Note] Plugin ‘FEDERATED’ is disabled.
^G/usr/sbin/mysqld: Can’t find file: ‘./mysql/plugin.frm’ (errno: 13)
140728 16:29:09 [ERROR] Can’t open the mysql.plugin table. Please run mysql_upgrade to create it.
140728 16:29:09 InnoDB: The InnoDB memory heap is disabled
140728 16:29:09 InnoDB: Mutexes and rw_locks use GCC atomic builtins
140728 16:29:09 InnoDB: Compressed tables use zlib 1.2.8
140728 16:29:09 InnoDB: Using Linux native AIO
140728 16:29:09 InnoDB: Initializing buffer pool, size = ***.0M
140728 16:29:09 InnoDB: Completed initialization of buffer pool
140728 16:29:09 InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: ‘open’.
InnoDB: Cannot continue operation.
”./mysql/plugin.frm”文件是在的啊,百思不得其姐啊,查看权限后,哥更改文件拥有者。
$sudo chown mysql -R /var/local/mysql/ #更改文件拥有者
接着又重启,依旧抱同样的错。关键就是这个文件了。
$sudo vi /etc/apparmor.d/usr.sbin.mysqld
/var/lib/mysql/ r,
/var/lib/mysql/** rwk,
改成
/var/local/mysql/ r,
/var/local/mysql/** rwk,
注:AppArmor是一个高效和易于使用的Linux系统安全应用程序,我并没有像神贴一样在my.cnf文件中找到关于/etc/apparmor.d/usr.sbin.mysqld的提示,可能是版本不一样的原因。
启动MySQL服务
$sudo service mysql start #启动MySQL服务,顺利启动^_^

浙公网安备 33010602011771号