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