小派存储的数据通过rsync自动定时同步到小码

Colin 1年前 ⋅ 131 阅读

演员表:

1,小派 树莓派pi(192.168.0.101)	饰演配角, 负责提供MySQL服务、ssh等服务;常年开启。
2,小码 笔记本MacOS(192.168.0.102)饰演主角, 负责同步小码的MySQL数据并且;有时候开启,有时候关机,开机时自动定时执行同步脚本。

剧情交代:

小派的工作压力太大了。
除了风扇有点吵被强行拆掉了之外;常年还要忍受不匹配的电源和过细的电源线造成不稳定供电电压,还有空气不流通以及高温环境。
甚至小区还会冷不防的停个电,即便得到提前通知,估计小派的主人也不会提前执行一下poweroff,因为小派的生死,有谁会在意呢?
还有更要命的,经常面临暴力的数据请求,因为主人经常一次查超过10万行数据而忘记加上limit...
现在的小派,堆积的灰尘已经遮蔽了它原本的英俊的面庞,当初清秀的后生如今已是满面沧桑的老者,一直被遗忘在那书柜顶端的角落,
无人问津,哪怕只是稍微打扫和清理一下积灰,那都是极其奢侈的妄想...
关键是小派的TF卡读写次数已经逐渐接近临界值,岌岌可危、它随时有可能撂挑子不干。
系统崩溃其实没有什么,换张卡重装一下系统也就好了。关键是数据也会随之丢失,永远找不到了。
还是及时地备份到小码的手里比较安全,毕竟小码硬盘大,再说身价高,没那么容易坏。

虽然小派使用的是Raspberry Pi,而小码使用的是MacOS操作系统,但是它们安装的数据库可同样都是MySQL的mariadb。
小版本虽有些差异但总体看上去应该都差不多,数据文件应该可以相互兼容。即便实在不兼容其实也没有关系,
大不了到想起来要用的时候再装个相同版本的读出来就是了。并不影响本篇日记的发表。

唯一需要注意的是MySQL的数据库表需要使用独立的表空间,这在my.cnf中[mysqld]下设置
innodb_file_per_table=1
这样做的好处是表文件相互独立分开,不会整个库使用一个idata大文件。
而整个库使用同一个文件所造成的后果就是无论哪张表发生数据的变化,都要将整个大文件同步给小码,造成小码的任务繁重从而连累了小码。

不过还好,小派和小码的mariadb经过 show variables like '%per_table%' 查询出 innodb_file_per_table 都是ON。
也就是打开状态。修改配置这一步又省了。看来是我多虑了!还没开始,离成功就近了一步。 

首先还是要确定一下双方用于存储数据的目录。小派的mysql执行 show variables like 'datadir' 
确定好小派的数据目录存放在 /var/lib/mysql/,需要备份的数据库有两个,一个是windowdb,
对应的目录就是/var/lib/mysql/windowdb/;另一个是windowdb_conf,那么对应的目录就是/var/lib/mysql/windowdb_conf/。
而小码此时也已经准备好了备份数据目录/Users/colin/dumps/windowdb和/Users/colin/dumps/windowdb_conf。
抱歉!以上都是废话。既然双方都准备好了,那么就正式开始吧。

开始表演:

首先由小码创建一个同步脚本文件
	
    vi /var/lib/rsync.sh

	键入:
	rsync -avz -e ssh pi:/var/lib/mysql/windowdb /Users/colin/dumps/windowdb
	rsync -avz -e ssh pi:/var/lib/mysql/windowdb_conf /Users/colin/dumps/windowdb_conf
    
	:wq 保存退出
	ssh pi 就是免密登陆到小派,参考另一篇 [Linux ssh免密码登陆](http://smallcode.cn/post/1)
    
然后小码准备cron脚本定期执行同步

	crontab -e
    
    键入:
    */60 * * * * /var/lib/rsync.sh

每60分钟即每小时执行一次数据同步。

至此,备份工作就算结束了,由于对方数据库一直处于运行过程中,也不知道备份过来的文件能不能正常使用。
实际环境可以在rsync.sh 同步之前加上 ssh pi "sudo systemctl stop mariadb" 
等同步脚本执行完之后再加上ssh pi "sudo systemctl start mariadb"启动mysql。
不过我的数据其实不是很重要,同步过来好不好使也主要看天意。目的就是写篇日记充实一下blog。

全部评论: 0

    我有话说: