前段时间,去中网科技开通了一个云服务器,linux系统,安装了LEMP环境(数据库用的是mariadb),跑网站感觉速度非常流畅,比较满意。用了一段时间之后,突然想到一个问题,虽然我的网站程序在第二块磁盘上,万一哪天系统奔溃了,我的网站数据是不会丢,但是我们数据库在系统盘,也就是sda设备上,那我到时候想重装系统,数据库岂不完蛋,赶紧想办法迁移数据库到sdb磁盘上面。
众所周知,MySQL(MariaDB)一般使用 /var/lib/mysql 目录作为默认的数据存储目录,默认的配置文件为/etc/my.cnf。既然要开始迁移,先把数据库停了再说:
[root@localhost wordpress]# systemctl stop mariadb.service
编辑配置文件:
[root@localhost wordpress]# vim /etc/my.cnf
配置文件内容如下:
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid # # include all files from the config directory # !includedir /etc/my.cnf.d
把其中的datadir和socket都注释掉,改成新的目录位置datadir=/mnt/sdb/mysql,socket=/mnt/sdb/mysql/mysql.sock,创建相应目录时,记得设置相应的权限和所有者,并且要注意selinux上下文的设置,别掉坑里去了!
chcon -Rt mysqld_db_t /mnt/sdb/mysql chcon -Ru system_u /mnt/sdb/mysql chown -R mysql:mysql /mnt/sdb/mysql
重新启动mariadb,连接数据库,提示未找到socket:
“ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)”
明明配置上已经修改了,但启动却找不到相应的socket,我不禁陷入了思索。虽然主配置改了socket,那么会不会是相应的client没有监听到socket。cd到/mnt/sdb/mysql,运行mysql -uroot -p –socket=mysql.sock,发现可以连接了!编辑:
vim /etc/my.cnf.d/client.cnf在[client]下面添加socket=/mnt/sdb/mysql/mysql.sock(如果原来的目录还保留着,也可以用这条命令解决问题ln -s /mnt/sdb/mysql/mysql.sock /var/lib/mysql/mysql.sock)
再次通过命令行连接mysql -uroot -p,不用指定socket也可以连接了。
打开网站,发现还是无法连接数据库,这里应该是php里面没有指定socket导致的,编辑:vim /etc/php.ini,指定相应的socket
mysql.default_socket = /mnt/sdb/mysql/mysql.sock
mysqli.default_socket = /mnt/sdb/mysql/mysql.sock
这时,应该就能打开网站了。