一台VPS上MariaDB数据库中有个数据库将近30G,而整个VPS的硬盘却只有40G,不管是打包导出还是备份,都无法直接以文件形式操作到VPS本地硬盘,没办法,只能想办法通过远程访问的形式将数据库导出来,毕竟数据才是最重要的。
在VPS本地硬盘足够大的情况下,我一般都是直接将数据库导出然后直接打包成.zip格式文件再转移到别的服务器,一行命令就能解决:
mysqldump -u user -p[user_password] [database_name] | gzip > dumpfilename.sql.gz
回车之后就能备份成一个单个压缩之后文件,备份完成之后就能直接复制到任意地方。
但是这次因为数据量太大了,如果再用这个方法,会导致整个VPS硬盘被爆,所以只能想办法借助另外的服务器通过远程连接的方式将数据导出去。
借助Google搜索了一把,发现还是MySQL自带的mysqldump命令最好用,可以借助另外服务器上安装MySQL客户端,然后使用mysqldump命令远程连接需备份的MySQL服务器,然后通过TCP连接将数据导出到新服务器。
这就遇到了另一个问题,由于MySQL默认是禁止远程访问的,而且CentOS7自带的还不是传统的MySQL,而是源自MySQL的MariaDB,配置起来稍有不同,这里仅记录一下。
我最后选择的是,到DigitalOcean开一个最低配的VPS,然后开一个容量为50G的Volume,再到DO的这个VPS上安装MariaDB相关软件包,这样可以通过mysqldump连接到需导出数据库的服务器。
整个过程DO所在的新服务器不需要进行额外的操作,只需要在需导出数据库的服务器上操作就行。
默认CentOS7包管理器安装的MariaDB是支持远程连接的,可通过一下命令查看MariaDB监听的IP地址及相关端口:
netstat -apn | grep mysql
如果输出如下内容则无需更改:
[root@DOSFO2 volume-sfo2-01]# netstat -apn | grep mysql
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2472/mysqld
unix 2 [ ACC ] STREAM LISTENING 106927 2472/mysqld /var/lib/mysql/mysql.sock
如果是监听的127.0.0.1或者*** 192.168.. ***相关内网IP或者回环地址则需更改MariaDB的监听IP。
首先是更改MariaDB的监听地址,让其监听整个互联网的连接,这样我们才能从外部服务器访问这台服务器的MariaDB服务:
备份配置文件:
cp /etc/my.cnf{,.bak}
更改数据库配置:
vim /etc/my.cnf
在bind-address = 127.0.0.1这一行前面加上#,将其注释掉。
然后重启MariaDB服务:
systemctl restart mariadb
再次用netstat命令查看MariaDB监听的IP及端口,如果是我上面地址则可进行下一步操作。
出于安全考虑,我们不应该直接允许root进行远程访问,所以下一步就是为对应的数据库专门新建一个对应的用户并赋予其权限对某个数据库进行远程访问,一样的,一行命令搞定:
GRANT ALL PRIVILEGES ON database.* TO database_user@localhost IDENTIFIED BY ‘databases_password’;
FLUSH PRIVILEGES;
最后一步,检查防火墙。如果开启了防火墙,则需放行MariaDB所在的3306端口。
查询3306端口是否开放:
[root@VPS ~]# firewall-cmd --query-port=3306/tcp
no
如果是no,则放行并重新加载防火墙配置:
[root@VPS ~]# firewall-cmd --permanent --add-port=3306/tcp
success
[root@VPS ~]# firewall-cmd --reload
success
到目前为止,可以在别的服务器用mysqldump命令远程访问并导出对应的数据库了。
顺便说一句,美帝服务器互相之间访问,速度真心快,我将近30G内容,10几分钟就转移好了。
另外注意,转移好数据之后,记得把相关配置还原。