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

mysql/mysqldatadirset.png

usr.sbin.mysqld文件

由于Ubuntu使用了apparmor安全模块,就是类似于沙盒运行的一种机制,它可以限制软件在运行时的一些行为,比如对哪些目录和文件可以读写加锁等等。

由于修改了数据库文件路径,所以要修改mysql数据库的apparmor配置文件,在其中将新数据库文件目录和文件的读写及加锁权限添加上去,同时可以删除或者注释掉原先/var/lib/mysql数据库文件目录的权限。mysql数据库的apparmor配置文件路径在/etc/apparmor.d/usr.sbin.mysqld。使用下面命令编辑这个配置文件:

mysql/mysqlapparmor.png

加入迁移目录的权限

/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

启动成功后,按照迁移后的帐号和密码来

source