Linux下整体迁移MySQL数据库文件目录

字号+ 编辑: 种花家 修订: H波 来源: CSDN博客 2023-09-11 我要说两句(0)

那时候还年轻,没想到数据库还要往数据盘里面塞,随便塞进系统盘里了事,没想到今天需要解决这个问题了。搜了搜,网上确实有一些相关联的话题, 但是忽略了一些细节, 这篇文章站长认为最棒, 并整理了一些细节推荐给大家。

注:rpm安装mysql,默认的mysql的主目录是【/var/lib/mysql/】,也就是mysql主要的数据文件的存放目录 
现在需要把这些文件放到数据盘。假设数据盘挂载到了/data里, 数据都在/data/mysql, 那么,迁移步骤如下:

1:迁移工作

1.1:停止mysql服务

service mysql stop

1.2:复制数据库到数据盘

我的数据盘目录是/data

>cd /data 
>mkdir mysql 
>cd mysql 
>cp -r /var/lib/mysql/* ./

1.3:把新建的目录改为mysql的用户组

不是表面上看到所有者是mysql就可以略过这一步的, 这一步无论如何都必须要执行!

chown -R mysql:mysql /data/mysql/

1.4:配置/etc/my.cnf

datadir = /data/mysql
# 如果你有以下两行类似配置, 你也需要修改目录!
innodb_data_home_dir = /data/mysql
innodb_log_group_home_dir = /data/mysql

1.5:启动mysql服务

>service mysql start

2:常见问题Q&A

2.1 首先迁移完的目标目录的权限问题。

ERROR! The server quit without updating PID file 1

这个是权限问题,mysql没有这个目录下的权限 
因为刚复制过来的mysql文件的拥有者是root,所以要改变该目录的拥有者,执行下面命令来改变 

chown -R mysql:mysql /data/mysql/

2.2 用mysql客户端连接不上服务器

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'1

其实是你的mysql的配置文件没有配置正确。 
mysql启动如果没有读到

[client]
socket = /data/mysql/mysql.sock
port = 3306
host = localhost

这些配置,则mysql会默认找 /var/lib/mysql/mysql.sock文件, 
如果要解决这个问题就需要把上面的东西加入到你的/etc/my.cnf配置文件中。

下面普及下mysql的有关配置文件的知识,以前我也是迷迷糊糊,现在搞清楚了一些。 
用 service mysql start 命令启动mysql,mysql会默认找/etc/my.cnf 配置文件,如果没有找到,则会按照默认的启动目录来启动mysql 
就是【/var/lib/mysql】 
会在此目录下生成 10-4-19-161.pid 类似的pid文件 和 sock文件【mysql.sock】 
但是如果你建立的了my.cnf 文件则mysql会按照你的配置文件来启动mysql。

2.3 用户密码过期问题

Your password has expired. To log in you must change it using a client that supports expired passwords1

则需要修改 mysql的用户表 
刚开始以为修改用户密码就可以解决密码过期的问题,其实不是的。需要修改msyql.user表的 password_expired值 
Y表示已经过期,需要修改成N。 
首先在本机进入mysql

>mysql -uroot -pxxxxx
>use mysql>select host,user,password_expired from user;
+-------------+----------+------------------+| host        | user     | password_expired |
+-------------+----------+------------------+| localhost   | root     | Y                |
| 10-4-19-161 | root     | Y                |
| 127.0.0.1   | root     | Y                |
| localhost   | data     | N                || 127.0.0.1   | shangbao | N                |
+-------------+----------+------------------+

如果有些是Y,则需要吧哪些是Y的改为N。 

update set user.password_expired = ‘N’ where user.user = ‘root’;

root是你密码过期的用户

然后刷新权限

>flush privileges;

因为mysql的权限是启动的时候缓存起来的,如果修改的用户的权限,需要手动刷新用户权限才会生效

阅完此文,您的感想如何?
  • 有用

    4

  • 没用

    1

  • 开心

    1

  • 愤怒

    2

  • 可怜

    1

1.如文章侵犯了您的版权,请发邮件通知本站,该文章将在24小时内删除;
2.本站标注原创的文章,转发时烦请注明来源;
3.Q群: 2702237 13835667

相关课文
  • [InnoDB] Failed to set NUMA memory policy of buffer pool page frames

  • 让Mysql查询后直接返回json字符串的方法

  • postgresql的pg_dump备份简单方法

  • 使用sql语句在MySQL库中去掉字段左边、右边指定字符串

我要说说
网上宾友点评