环境:Debian 11.3

百无聊赖,折腾一下。自己的库里有300多表,想着法子加速一下吧。。。

很明显,放内存里是最快的,但是有一个安全性问题,比如死机和异常断电。不过这个在我这里还好,因为每天有完整备份,还做着同步复制,所以数据是不会丢的。

折腾了几个小时,起初思路是一个内存盘,一个物理盘,两者构成一个raid 0,设置只从内存读取。这个并不复杂,但我这个raid太大了,要缩减出来一点空间的话万一文件系统出问题就要很长时间重建,所以只能放弃。

然后想着是一个内存盘,一个用文件构成的虚拟盘,两者raid 0 或者类似的路子,可惜这个事我不熟,没搞成,尴尬。

最后只能纯内存盘了,反正数据安全是没问题的。

 

于是又有几个思路。

起初考虑是系统启动和关机时处理,但时机不好把握,很难精确的注入到mysql启动前和关闭后这个时间点,还有个问题就是中途重启数据库无法掌控。

考虑了几种办法,最终是创建一个自己的系统服务,注册成为mysql服务的周期前后两个点,这样就完美了。

==============

经长时间测试,外部服务的方式并不稳定。目前更稳定的新方法是把动作注入mysql的systemd配置文件。

 

具体做法:

1,创建存放目录和内存盘

mkdir /mysqldb
mkdir /mysqldb2

echo "" >> /etc/fstab
echo "tmpfs /var/lib/mysql tmpfs rw,noatime,mode=1777,size=3g,nr_inodes=500K 0 0" >> /etc/fstab

这里我弄了两个,mysqldb2是为了避免操作失误的,当一切就绪并且重启测试没问题就可以删了。

 

2,停止mysql/mariadb,挂上内存盘,同步数据

systemctl stop mysql
rsync -a --delete /var/lib/mysql/ /mysqldb/
rsync -a --delete /var/lib/mysql/ /mysqldb2/
mount --types tmpfs --options rw,noatime,mode=1777,size=3g,nr_inodes=500K --source tmpfs --target /var/lib/mysql
rsync -a --delete /mysqldb/ /var/lib/mysql/

注意,这里必须关掉mysql,后面说具体原因。

 

3,注册自己的服务 (此步骤更新在后面)

cat > /lib/systemd/system/mariadbonramdisk.service <<- _EOF1_
[Unit]
Description=mysql/mariadb on ramdisk
Before=mysql.service

[Service]
Type=oneshot
ExecStart=/usr/bin/rsync-a --delete /mysqldb/ /var/lib/mysql/

ExecStop=/usr/bin/rsync-a --delete /var/lib/mysql/ /mysqldb/

[Install]
RequiredBy=mysql.service

_EOF1_


systemctl enable mariadbonramdisk.service
systemctl daemon-reload

3,修改mysql/mariadb的服务文件

在/usr/lib/systemd/system/mariadb.service里面[Service]单元增加两行即可:

ExecStartPre=/usr/bin/rsync -a --delete /mysqldb/ /var/lib/mysql/
ExecStopPost=/usr/bin/rsync -a --delete /var/lib/mysql/ /mysqldb/

ExecStartPre需要放在所有现存ExecStartPre之前。然后重载并且重启mysql/mariadb:

systemctl daemon-reload
systemctl restart mysql

 

 

注意,可能需要根据你的实际情况修改路径什么的。强烈建议先在虚拟机上测试,自己不够熟悉的话就别直接干上生产环境去。

 

嗯,完成了以后看起来就很简单了,但必须按本文流程走,不然很容易丢数据,别问我怎么知道的。。。不过我测试的时候是在虚拟机,呵呵。

在第二步的时候,必须关掉mysql/mariadb,因为一旦自己的服务注册上,就会随着mysql的启动/停止而产生动作,所以有些步骤需要事先做好。

这几步完成以后,可以试一下重启机器、重启mysql、修改数据什么的,速度应该飞起了,很爽的。

作者 听涛

发表评论

您的电子邮箱地址不会被公开。