Ubuntu下MySQL数据库迁移

参考了此篇文章

确定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 #为了生效,保险起见 还是再重启一下服务 强迫症
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值