Mysql数据存储目录切换

背景

某项目发现数据库磁盘储存空间不足,挂载了一块新磁盘,需要切换存储目录到新的

前提

 新挂载的磁盘(挂载方式略),例如挂载到/data目录下

实施

1、停服、防止操作期间数据库写入

2、mysql数据库备份

使用mysqldump命令给数据库数据做备份

3、数据库停机

直接kill掉进程

4、更改数据库目录后重新启动

原有启动脚本:

   /usr/bin/mysqld_safe --datadir=/var/lib/mysql  --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql

修改后台脚本:

/usr/bin/mysqld_safe --datadir=/data/var/lib/mysql  --pid-file=/data/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql

datadir:数据的存储路径,在原来的基础上增加/data
basedir:数据库安装的文件路径,(精确到数据库的bin的上层)
pid-file:mysql进程存储文件的全路径
user:以mysql用户启动

5、步骤4启动的结果是:
起不来

错误日志:

**/usr/local/mysql/bin/mysqld: Table 'mysql.plugin' doesn't exist**

原因:新的存储目录下不包括的元数据库mysql

6、解决方案:

1、使用无权限的方式启动(禁止)

  在启动脚本上加命令跳过权限表:
 --skip.grant.tables

2、通过mysql的脚本安装所缺失的文件

 执行以下命令:
 
 (1) whereis mysql_install_db  找到mysql_install_db路径
 (2) ./mysql_install_db --user=mysql --basedir=/home/mysql5627 --datadir=/usr/mysqldata

7、执行完6后,以无权限方式启动进入mysql,修改权限

启动

/usr/bin/mysqld_safe --datadir=/data/var/lib/mysql  --pid-file=/data/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql --skip.grant.tables

设置密码和开放IP访问:

update mysql.user set password=password("123456") where user="root" and host="localhost";

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mypwd' WITH GRANT OPTION;

flush privileges;

8、数据恢复
使用账号名密码登录

mysql -uroot -p
执行数据恢复脚本
source  /xxxx/datadump.sql

9、系统重启,数据测试验证

你可能感兴趣的:(mysql)