Ubuntu下MySQL数据库迁移

来源:互联网 发布:美国it人员年薪 编辑:程序博客网 时间:2024/06/06 00:26

参考了此篇文章

确定MySQL数据库文件位置
MySQL 命令

show variables like '%dir%';

注:用Ubuntu的apt包管理工具安装的mysql数据库,默认将数据库文件保存在/var/lib/mysql目录下

停止服务
sudo /etc/init.d/mysql stop
或者
service mysql stop

拷贝文件

sudo cp -a /var/lib/mysql /mnt/data/

注:使用cp复制命令将原数据库目录文件复制到新的目录,好处是。。万一迁移失败,恢复工作相对简单一点,等确认迁移成功再来删掉原数据库目录文件也不迟。为了不影响复制过来数据库目录文件权限和用户用户组归属问题,使用cp命令时要加上-a参数

关键步骤
修改配置文件
一共需要改3个文件 需要root权限

第一个 my.cnf文件

 vim /etc/mysql/my.cnf

将其中[mysqld]标签下的datadir属性值改为新数据库目录路径如:/data/mysql

第二个 usr.bin.mysqld文件

vim /etc/apparmor.d/usr.sbin.mysqld

找到其中的

/var/lib/mysql/ r,/var/lib/mysql/** rwk,

两行权限声明,可以在前面加上#好注释掉。然后对照格式,加入新路径的权限声明:

/data/mysql/ r,/data/mysql/** rwk,

第三个 abstractions/mysql文件

vim /etc/apparmor.d/abstractions/mysql

同样也是将新数据库文件路径中的socket文件权限添加进去,同时可以删除或者注释掉全路径中申请的权限,效果如下

# ------------------------------------------------------------------##    Copyright (C) 2002-2006 Novell/SUSE#    Copyright (C) 2013 Christian Boltz##    This program is free software; you can redistribute it and/or#    modify it under the terms of version 2 of the GNU General Public#    License published by the Free Software Foundation.## --------------------------------------------------------   #/var/lib/mysql/mysql.sock rw,   /data/mysql/mysql.sock rw,  #照猫画虎 自己的路径   /{var/,}run/mysql/mysql.sock rw,   /usr/share/{mysql,mysql-community-server,mariadb}/charsets/ r,   /usr/share/{mysql,mysql-community-server,mariadb}/charsets/*.xml r,

最后别忘了重启一下服务
配置文件修改成功后就可以重启数据库,重启数据库之前需要先重新载入apparmor配置文件,使用下面命令重新载入:

sudo /etc/init.d/apparmor restart

重载成功就可以使用下面命令启动数据库:

sudo /etc/init.d/mysql start

关于启动失败

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

的问题 参考此篇文章

话说不会偷懒的程序员不是好程序员,因为有N多台机器要我改,不可能一个一个来搞,那会蠢死去。所以研究了一下 弄了个测试脚本共享一下也方便有需要的童鞋。PS:改之前千万记得备份。备份真的是个好习惯

 /etc/init.d/mysql stop;sudo cp -a /var/lib/mysql /data/;  #成功之后可以删掉原目录的文件sed -i '42s?/var/lib?/data?' /etc/mysql/my.cnf;sed -i '32s?/var/lib?/data?' /etc/apparmor.d/usr.sbin.mysqld;sed -i '33s?/var/lib?/data?' /etc/apparmor.d/usr.sbin.mysqld;sed -i '12s?/var/lib?/data?' /etc/apparmor.d/abstractions/mysql;/etc/init.d/apparmor restart;/etc/init.d/mysql start;service mysql restart #为了生效,保险起见 还是再重启一下服务 强迫症
0 0
原创粉丝点击