标签 linux 下的文章

对于不能 SSH 的场景的确够麻烦,rsync 又嫌麻烦,只能 FTP 了。

以下是自己马克用的。

#!/bin/bash
date=`date +%Y%m%d`
deldate=`date -d -{NUMBER}day +%Y%m%d`
ftp -inp<<!
open {HOST} {PORT}
user {FTP_USER} {FTP_PASSWD}
cd /
lcd /data/backup
mdelete *$deldate*
mput *$date*
close
bye
!

注意几点:

1、脚本中花括号内容替换为对应的变量;
2、cd 是远程的目录,lcd 是本地目录;
3、备份文件名需符合 date +%Y%m%d 这样的规则。

Oneinstack 有一个备份配置脚本:backup_setting.sh 及备份脚本:backup.sh。目前已经支持本地备份、远端主机备份及诸如阿里云、七牛云等各种云的备份。虽然同时支持多种方式进行备份,但同一种备份方式只能选一次,譬如不能同时向两个远端主机进行备份,且只能通过 ssh 方式。在比较看重异地灾备的情况下,多远端主机备份的需求不能满足;在不方便开启外网 ssh 的情况下,这个脚本也不能满足。

面对前述情况我做了一些调整:

1、Oneinstack 自带备份脚本只进行本地备份和各种云的备份。默认本地备份路径是 /data/backup,通过观察备份文件名的规律可得出:

ls -lah /data/backup/*20190101*

可匹配到当日备份成功的新文件。

2、远端备份机搭建 FTP 服务,一般 VPS 需要开启被动模式支持,防火墙配置好被动模式的端口段。

3、本地提前安装好 FTP 客户端:

yum -y install ftp

需要每向一台远端备份机上传,便增加一个脚本:

#!/bin/bash
ftp -n<<!
open REMOTE_HOST_IP REMOTE_PORT
user FTP_USER FTP_PASSWD
binary
hash
cd /
lcd /data/backup
prompt
mput *$(date "+%Y%m%d")*
close
bye
!

注意自行修改脚本中大写字母部分的配置,也可拎出来做变量配置。若有问题可在 ftp 后面加 -v 或 -d 参数,输出对端返回和打开 debug 模式,以进一步调试。

测试通过后就可以放 crontab 了,需要备份到几个地方就开几个脚本。再也不用担心神马地震、海啸、核武,美滋滋。

- EOF -

开篇第一句,感谢马爸爸。

以前在墙外 VPS 上,不需要修改 yum 源也飞快。后来用了猪厂的 yum 源,速度尚可。当有几十台服务器需要一起管理时,时间就显得特别珍贵了。因此,我找了这个物理位置最近的 yum 源。

留下命令自己马克:

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup \
&& wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

下面这个文件没有就不换了:

mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup \
&& wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo

最后:

yum clean all && yum makecache

要不要 update 你说了算:

yum -y update

嗯,真香。

近日,某导演发给我一个神秘的链接。不敢独享,遂发圈。因将敏感词替换成了“xxx”,结果被人误会是公然开车。打算助个力,建个镜像,以证清白。

昨日周末,用一台 GCP 的台湾 Windows 主机跑这个神秘项目的种子。经过一个下午的等待,这个神秘的高达 30G 的“file.tar”终于到手。

把存放数据的磁盘分配至另一台同机房的 CentOS 主机,fdisk -l 一下。嗯,NTFS,很酸爽。

这里用到一个叫做“NTFS-3G”的项目,下载最新的版本:

wget -c https://tuxera.com/opensource/ntfs-3g_ntfsprogs-2017.3.23.tgz

解压、编译,一气呵成。

tar xzf ntfs-3g_ntfsprogs-2017.3.23.tgz && cd ntfs-3g_ntfsprogs-2017.3.23 && ./configure && make && make install

尝试挂载:

mkdir -p /path_to_wikileaks && mount -t ntfs-3g /dev/vdb /path_to_wikileaks

报错,提示 /dev/vdb 是一整块磁盘。所以:

parted -l

得到正确挂载路径是 /dev/vdb2(是因为 NTFS 首分区保留的意思吗?),最终:

mount -t ntfs-3g /dev/vdb2 /path_to_wikileaks

搞定,/etc/fstab 略。

我使用的是 mysqld_multi 这种实现方式,每个实例有其独立的配置文件,适合强迫症患者服用。

首先配置 MariaDB 的官方 yum 源:

vim /etc/yum.repos.d/MariaDB.repo

在新建的文件中添加:

# MariaDB 10.3 CentOS repository list - created 2018-08-28 05:47 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

这里使用的是 MariaDB 10.3,当前貌似有 10.4 版本,可自行在官网查询。

完事儿之后就可以安装 MariaDB 了,这里采用二进制文件而非源码编译:

yum -y install MariaDB-server MariaDB-client

现在我准备部署三套 MariaDB 实例,具体是:

端口:3307,对应数据目录:/data/mysql/3307;
端口:3308,对应数据目录:/data/mysql/3308;
端口:3309,对应数据目录:/data/mysql/3309。

那么先来创建每个实例对应的目录:

mkdir -pv /data/mysql/330{7,8,9}

然后将这些目录所属修改到 MariaDB 用户与用户组:

chown -R mysql:mysql /data/mysql/330{7,8,9}

初始化数据目录:

mysql_install_db --datadir=/data/mysql/330{7,8,9}/data --basedir=/usr --user=mysql

好了,创建 MariaDB 配置文件:

vim /etc/my.cnf

在新建的文件中添加:

[mysqld_multi]
mysqld     = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user       = multi_admin
password   = YOUR_PASSWORD

[mysqld3307]
socket     = /data/mysql/3307/mariadb.sock
port       = 3307
pid-file   = /data/mysql/3307/mariadb.pid
datadir    = /data/mysql/3307/data
user       = mysql

[mysqld3308]
socket     = /data/mysql/3308/mariadb.sock
port       = 3308
pid-file   = /data/mysql/3308/mariadb.pid
datadir    = /data/mysql/3308/data
user       = mysql

[mysqld3309]
socket     = /data/mysql/3309/mariadb.sock
port       = 3309
pid-file   = /data/mysql/3309/mariadb.pid
datadir    = /data/mysql/3309/data
user       = mysql

到这里,已经可以启动这三个实例:

mysqld_multi start 3307-3309

接着再做一些配置,请 One By One 地来:

mysql_secure_installation -S /data/mysql/3307/mariadb.sock
mysql_secure_installation -S /data/mysql/3308/mariadb.sock
mysql_secure_installation -S /data/mysql/3309/mariadb.sock

现在我们修改 root 密码,依然是 One By One:

mysqladmin -u root -p password -S /data/mysql/3307/mariadb.sock
mysqladmin -u root -p password -S /data/mysql/3308/mariadb.sock
mysqladmin -u root -p password -S /data/mysql/3309/mariadb.sock

创建一个 SQL 文件:

vim /data/src/create_user.sql

在新建的文件中添加:

CREATE USER 'multi_admin'@'localhost' IDENTIFIED BY 'YOUR_PASSWORD';
GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost';
flush privileges;

在每个实例中执行以创建多实例管理用户,嗯,One By One:

cat create_user.sql | mysql -u root -S /data/mysql/3307/mariadb.sock -p
cat create_user.sql | mysql -u root -S /data/mysql/3308/mariadb.sock -p
cat create_user.sql | mysql -u root -S /data/mysql/3309/mariadb.sock -p

然后再创建一个 sysv 脚本:

vim /etc/rc.d/init.d/mysqld_multi

在新建的文件中添加:

mysqld_multi=/usr/bin/mysqld_multi

instance_list="3307-3309"

start(){
    $mysqld_multi start $instance_list
}
stop(){
    $mysqld_multi stop $instance_list
}
status(){
    $mysqld_multi report
}
case "$1" in
    start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
start
stop
;;
*)
echo $"Usage: $0 {start|stop|status}"
exit 2
esac

接着添加 sysv:

chkconfig --add mysqld_multi

启用服务:

chkconfig mysqld_multi on

实现开机启动:

echo mysqld_multi start 3307-3309 >> /etc/rc.local

- EOF -