前段时间,去中网科技开通了一个云服务器,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
这时,应该就能打开网站了。

记一次数据库数据目录迁移过程

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注