有这样一个需求:需要一个数据库用来保存备份数据,但是不出意外的话平时并不需要提供查询服务。备份硬盘如果和服务器一起长期通电,会增加故障概率减少实际使用寿命,因此平时此硬盘并不挂载也不通电。
为满足这样的需求,我尝试为MariaDB创建临时实例,挂载硬盘后就启动实例,完成备份后再停掉实例再卸载硬盘。
一 首先挂载硬盘到/u目录,sdx1代表硬盘,在我的服务器上实际是sdc1
mount /dev/sdc1 /u
二 然后创建实例所需的初始化文件
mysql_install_db --datadir=/u/mysql --user=mysql --force
--force参数是强制创建,如果不加这个参数会报一个错误
Neither host 'localhost.localdomain' nor 'localhost' could be looked up with
'/usr/libexec/resolveip'
Please configure the 'hostname' command to return a correct
hostname.
创建完成后确认一下,/u/mysql会有一堆文件
ls -la /u/mysql
总用量 28704
drwx------ 5 mysql root 176 11月 25 11:48 .
drwxr-xr-x 3 root root 19 11月 25 11:15 ..
-rw-rw---- 1 mysql mysql 16384 11月 25 11:48 aria_log.00000001
-rw-rw---- 1 mysql mysql 52 11月 25 11:48 aria_log_control
-rw-rw---- 1 mysql mysql 18874368 11月 25 11:48 ibdata1
-rw-rw---- 1 mysql mysql 5242880 11月 25 11:48 ib_logfile0
-rw-rw---- 1 mysql mysql 5242880 11月 25 11:26 ib_logfile1
drwx------ 2 mysql root 4096 11月 25 11:15 mysql
-rw-rw---- 1 mysql mysql 2303 11月 25 11:48 mysql.log
drwx------ 2 mysql mysql 4096 11月 25 11:15 performance_schema
drwx------ 2 mysql root 6 11月 25 11:15 test
三 为新实例创建启动配置文件
新建文件/etc/my_multi.cnf
内容是:
[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user = root
[mysqld2]
socket = /u/mysql/mysql.sock
port = 3307
pid-file = /u/mysql/mysql.pid
datadir = /u/mysql
log = /u/mysql/mysql.log
user = mysql
至此准备工作已经完成。
实际备份工作所需的脚本需要这样写:
#挂载硬盘
mount /dev/sdc1 /u
#启动实例
mysqld_multi --defaults-extra-file=/etc/my_multi.cnf start 2
#执行真正的备份工作,略过
#...
#停止实例
mysqld_multi --defaults-extra-file=/etc/my_multi.cnf stop 2
#卸载硬盘
umount /u