红联Linux门户
Linux帮助

CentOS下mysql更改数据存放目录

发布时间:2016-11-29 09:47:44来源:linux网站作者:不语者
下面我整理一下把MySQL从/var/lib/mysql目录下面转移到/home/mysql目录的具体操作:
 
1、首先我们需要关闭MySQL,命令如下:
service mysqld stop
 
2、然后是转移数据
为了安全期间,我们采用复制命令cp,先找到mysql的原目录 
cd /var/lib 
ls 
运行这个命令之后就会看到mysql的目录了,然后执行cp命令 
cp -a mysql /home/mysql_data/   #这样就把数据库复制到/home/mysql_data下面去了 
注意:(-a这个参数一定要带着,否则复制过去的权限就不对了。) 
如果数据库比较大的话,时间会比较长,可能会超时,可以将复制的时候作为后台复制,命令如下
cp -a mysql /home/mysql_data/ &
 
3、然后我们修改配置文件,一共有三个: 
1].修改第一个文件:
修改之前先备份cp /etc/my.cnf /etc/my.cnfbak 
vi /etc/my.cnf 
打开之后修改datadir的目录为/home/mysql_data/mysql 
把socket改成/home/mysql_data/mysql/mysql.sock #为了安全起见,你可以把原来的注释掉,然后重新加入一行,改成现在的目录。 
2].修改第二个文件:
修改之前先备份 cp /etc/init.d/mysqld /etc/init.d/mysqldbak 
vi /etc/init.d/mysqld 
注意:准确的位置是/etc/rc.d/init.d/mysqld,由于这里这里有一个/etc/init.d到/etc/rc.d/init.d的映射, 所以用上面的命令即可,也简单。 把其中datadir=/var/lib/mysql一行中,等号右边的路径改成你现在的实际存放路径:/home/mysql_data/mysql 
3].修改第三个文件:
修改之前先备份 cp /usr/bin/mysqld_safe /usr/bin/mysqld_safebak 
vi /usr/bin/mysqld_safe 
这里也是修改datadir的目录为/home/mysql_data/mysql 
 
4、下面需要建立一个mysql.sock的链接: 
ln -s /home/mysql_data/mysql/mysql.sock /var/lib/mysql/mysql.sock 
至此所有的修改都完成了,下面启动mysql 
service mysqld start 
或者重启linux 
reboot 
如果能正常启动,恭喜你修改成功!
 
错误分析:
Starting MySQL.. ERROR! The server quit without updating PID file (/var/lib/l/JJonline.pid).
服务器上的几个网站还跑着了,mysql启动不了这不歇菜了。找了找相关这种问题的资料,这里做下总结。
 
一、my.cnf配置文件datadir项配置错误或被启动脚本篡改
这个问题不太说讲,主要是mysql自带的启动文件(/etc/init.d/mysqld)中会自动检测mysql的数据存储目录,若mysql新装,尚未初始化系统表,那么配置文件中的datadir项写不写无所谓,出现这种情况主要是在更改了mysql的数据存储目录,今天我出现的这个问题就在于此。
我的mysql安装后的配置文件中关于datadir项目的配置如下,而该配置文件存储于/etc/my.cnf,今儿不知动了什么东西,查来查去都没找着原因,后来打开该配置文件才发现,其中的datadir项目被改成/var/mysql/data了.....
[mysqld] datadir=/data/mysql socket=/tmp/mysql.sock user=mysql
 
二、进程里已经存在mysql进程
这种情况我很少遇到,若存在mysql进程但有不提供mysql服务(表现为其他客户端连接不上mysql服务器,例如php连接mysql时提示“连接失败”),这个时候就要看看有没有存在的mysql僵尸进程了,命令如下:
ps -ef|grep mysql
若存在,该命令执行后会列出存在的僵尸进程,kill -9 `pid`掉即可。
 
三、mysql的数据存储目录权限不足
这种情况发生于mysql第一次安装或升级,配置文件中的datatdir目录的权限要设定好,一般来说运行mysql的用户以及组就是mysql.mysql,那么解决权限不足问题的方法如下:
chown -R mysql.mysql /data/mysql ##该命令仅为示例,其中/data/mysql就是mysql配置文件中datadir的目录 ##若为空,则默认为mysql安装目录下的data文件夹下
 
四、覆盖安装或升级mysql后,残余数据的影响
这种情况发生于mysql被覆盖安装或升级后,当然mysql无故宕机后也会有这种情况,可能会影响mysql启动的数据文件,一般存在于mysql的数据存储目录(这个目录依据my.cnf配置文件中的datadir而异),也就是存在于mysql数据存储目录下的mysql-bin.index文件,删除之即可。
 
五、selinux的问题,centos下最容易出现
selinux不甚了解,直接关掉。
方法1:永久关闭seliux ##修改 vi /etc/selinux/config #文件中设置SELINUX=disabled ,然后重启服务器
方法2:暂时关闭seliux setenforce 0 ##如需每次开机都铃声关闭seliux,则可以在/etc/rc.d/rc.local文件中添加该命令
 
六、mysql运行状态下删除binary日志后重启失败
这是今天在群里的一个朋友出现的,特汇总于此;当mysql开启了二进制日志并且mysql在运行状态下用rm命令删除过mysql的binary日志文件的话,下次重启mysql你就悲剧了。
什么是binary日志?说白了就是mysql的数据目录下的mysql-bin.000001、mysql-bin.000002的文件,下图所示。
CentOS下mysql更改数据存放目录
解决方法就是修改配置文件临时关闭binary-log,然后删除mysql数据目录下的所有类似mysql-bin.000001、mysql-bin.000002的文件后再次重启,mysql即可启动成功。
#mysql配置关闭二进制日志 找到如下语句 注释掉即可 #log-bin=mysql-bin #binlog_format=mixed
此步骤操作完毕之后,若还需要启用二进制日志,那么就要先停掉mysql服务,然后修改msyql的配置文件,再次重启即可。
另外再附上正确删除mysql二进制日志文件的方法(绝对不是rm -rf命令直接删这些文件):
#第一步 通过shell或cmd登录进mysql 这步没什么好说的 msyql -u root -p *** #第二步 在mysql下直接执行清理binary日志命令 mysql> rese
 
七、mysql远程连接报错
问题代码代码
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.0.19' (111) 
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.0.19' (111)
这个原因就是Mysql数据库的默认配置文件my.cnf(linux下)中的bind-address默认为127.0.0.1,所以就算你创建了可以 remote访问的用户,你也不能使用mysql -h命令进行访问,若访问就会出现上出问题,因为此时Mysql只接受localhost,所以需要把bind-address屏掉。 
my.cnf一般在/etc/mysql下面,如果不在使用locate my.cnf查找,修改前的my.cnf配置文件为: 
修改前的my.cnf配置文件代码 
# Instead of skip-networking the default is now to listen only on 
# localhost which is more compatible and is not less secure. 
bind-address = 127.0.0.1 
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
我们需要做的就是屏掉这个bind-address代码,屏掉后代码为: 
屏掉后my.cnf配置文件代码 
# Instead of skip-networking the default is now to listen only on 
# localhost which is more compatible and is not less secure. 
#bind-address = 127.0.0.1 
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1
现在你就可以用mysql -h命令进行你想做的操作了,如登录系统: 
登陆数据库代码 
如果无法解决,那可能是防火强的问题:
解决办法:关闭防火墙,linux下命令
service iptables stop
如果任然无法解决,检查是否将账户设置为可从任何主机上访问mysql数据库
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
如果你想允许用户zz从ip为192.168.1.3的主机连接到mysql服务器,并使用123456作为密码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.3' IDENTIFIED BY '123456' WITH GRANT OPTION;
重启生效:
service mysql restart
 
本文永久更新地址:http://www.linuxdiyf.com/linux/26414.html