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

字号+ 编辑: 秦朝 修订: 秦朝 来源: CSDN博客 2015-02-07 11:55:08 我要说两句(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:常见问题

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的权限是启动的时候缓存起来的,如果修改的用户的权限,需要手动刷新用户权限才会生效

阅完此文,您的感想如何?
  • 鼓掌

    1

  • 鄙视

    0

  • 开心

    0

  • 愤怒

    0

  • 可怜

    0

1.转来的文章都会标好来源,如对来源资料存疑,请邮件声明;
2.本站标注原创的文章,转发时烦请注明来源;
3.如文章侵犯了您的版权,请通知本站,该文章将在24小时内移除。

相关课文
  • MySQL重启/启动时候报错:The server quit without updating PID file

    MySQL重启/启动时候报错:The server quit without updat

  • MySQL服务的root密码重置

    MySQL服务的root密码重置

  • 如何去掉MySQL数据库字段中的换行符

    如何去掉MySQL数据库字段中的换行符

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

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

我要说说
网上宾友点评