mysqlcopydata - juedaiyuer/researchNote GitHub Wiki
mysql通过拷贝数据文件的方式进行数据库迁移
源数据库
将源数据库的data下关于数据库的文件和ibdata1拷贝,其余不用拷贝
只需要拷贝所需要移动的dbname,mysql,ibdata1即可
拷贝过来的文件,用户和用户组为mysql
mysql> show variables like '%dir%';
+-----------------------------------------+----------------------------+
| Variable_name | Value |
+-----------------------------------------+----------------------------+
| basedir | /usr |
| binlog_direct_non_transactional_updates | OFF |
| character_sets_dir | /usr/share/mysql/charsets/ |
| datadir | /var/lib/mysql/ |
| innodb_data_home_dir | |
| innodb_log_group_home_dir | ./ |
| innodb_max_dirty_pages_pct | 75 |
| lc_messages_dir | /usr/share/mysql/ |
| plugin_dir | /usr/lib/mysql/plugin/ |
| slave_load_tmpdir | /tmp |
| tmpdir | /tmp |
+-----------------------------------------+----------------------------+
11 rows in set (0.00 sec
停止mysql数据库服务
sudo /etc/init.d/mysql stop
修改配置文件
$ sudo vim /etc/mysql/my.cnf
usr.sbin.mysqld文件
由于Ubuntu使用了apparmor安全模块,就是类似于沙盒运行的一种机制,它可以限制软件在运行时的一些行为,比如对哪些目录和文件可以读写加锁等等。
由于修改了数据库文件路径,所以要修改mysql数据库的apparmor配置文件,在其中将新数据库文件目录和文件的读写及加锁权限添加上去,同时可以删除或者注释掉原先/var/lib/mysql数据库文件目录的权限。mysql数据库的apparmor配置文件路径在/etc/apparmor.d/usr.sbin.mysqld。使用下面命令编辑这个配置文件:
加入迁移目录的权限
/home/juedaiyuer/winddata/ r, /home/juedaiyuer/winddata/** rwk,
abstractions/mysql文件
由于usr.bin.mysqld文件中引用了abstractions/mysql文件,也就是会将abstractions/mysql文件中的权限声明导入进来。因此,也修改下这个文件:
添加如下代码
/home/juedaiyuer/winddata/mysql.sock rw,
重启数据库
配置文件修改成功后就可以重启数据库,重启数据库之前需要先重新载入apparmor配置文件,使用下面命令重新载入:
$ sudo /etc/init.d/apparmor restart
重载成功就可以使用下面命令启动数据库:
$ sudo /etc/init.d/mysql start
start: Job failed to start
数据库的datadir用户名和用户组
$ sudo chown -R mysql:mysql winddata
启动成功后,按照迁移后的帐号和密码来