linux自动备份网站和数据库,到另外服务器上,为当前用户创建定时任务
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux自动备份网站和数据库,到另外服务器上,为当前用户创建定时任务相关的知识,希望对你有一定的参考价值。
参考技术A linux自动备份网站和数据库,到另外服务器上,为当前用户创建定时任务两台服务器111,和117服务器,每天完成111服务器上网站和数据库自动备份到117服务器上1:我的111服务器上是当前用户:sxA:查看当前用户的计划任务:crontab
-l是查看当前用户的任务用
vi
crontab
-e
是为sxw用户创建一个计划任务第一行:每天3点运行/home/sxw/rsync201.sh
shell脚本,第二行:和第三行是每天下午7点运行tar包,gaokaotong和phpcms文件第三行:每天7点22分运行/homesxw/back_up.sh
shell脚本,注意:这里是当前用户sxw,所以要shell脚本路径要有用户sxw权限,在这里/home/sxw/back_up
shell脚本,是当前用户sxw用户的家目录。B:
111服务器上/home/sxw/back_up.sh脚本code:-bash-3.2$
vim
/home/sxw/back_up.sh#!/bin/shecho
开始备份数据库mysqldump
-u
jeecms
-pjeecms1234
gktcms
>
gktcms.sqlmysqldump
-u
jeecms
-pjeecms1234
phpcms
>
phpcms.sqlecho
备份数据库完成,复制到117服务器端scp
-P
10022
gktcms.sql
zk@114.113.145.117:/home/zkscp
-P
10022
phpcms.sql
zk@114.113.145.117:/home/zkscp
-r
-P
10022
/opt/www/www2/phpcms.tar.gz
zk@114.113.145.117:/home/zk/scp
-r
-P
10022
/opt/www/www2/gaokaotong.tar.gz
zk@114.113.145.117:/home/zk/echo
发送完成C:
还要在111上做ssh信任,这个可参照ssh资料。很简单,只需要建立两个密钥。2:
117服务器上/homezk/自动就会多出两个tar包文件,phpcms.tar.gz
和gaokaotong.tar.gz这里每天自动保存两个文件,phpcms.tar.gz
和
gaokaotong.tar.gz文件
这里做了一个shell脚本,保存前两天的文件,跟上述111服务器上的建立计划任务一样:A:
查看117的计划任务:
crontabl
-lB:
在查看/home/zk/back.sh
的shell编写code:[zk@DB2~]$
vi
/home/zk/back.sh#!/bin/shTARFILE=/home/zk/phpcms.tar.gzif
[
-f
$TARFILE
];then
mv
/home/zk/phpcms.tar.gz
/home/zk/phpcms_$(date
+%Y%m%d).tar.gz
#remove
date
file
DATE_B=$(date
-d2
day
ago
+%Y%m%d)
FILENAME=/home/zk/phpcms_$DATE_B.tar.gz
if
[
-f
$FILENAME
];then
rm
-rf
/home/zk/phpcms_$DATE_B.tar.gz
else
echo
没有可删除文件
fielse
echo
没有源文件fi~
结束。
MySQL 基于主主备份
在两个服务器上都要开启二进制日志和中继日志
如果两个服务器的数据库id启动自动增长功能,要在配置文件中设置一个的id为奇数,另外一个的id为偶数,或者一个的id为偶数,另外一个的id为奇数,因为如果不这样设置,有可能两个服务器上同时都有用户在写的时候会产生相同的id号造成冲突,所以一般情况下不建议数据库的id号启用自动增长功能,或者用id生成器进行生成。
一、环境说明:
IP | 主机名 | 数据库名 | 连接用户 | 密码 |
192.168.47.179 | Mariadb01 | retail | server01 | server01 |
192.168.47.178 | Mariadb02 | retail | server02 | server02 |
二、搭建步骤
2.1 创建数据的连接用户
Mariadb01上面创建连接用户server01,并且只能通过192.168.47.178进行连接;
脚本:mariadb[none]> GRANT REPLICATION SLAVE ON*.* TO‘server01‘@‘192.168.47.178‘ IDENTIFIED BY ‘server01‘;
Mariadb02上面创建连接用户server02,并且只能通过192.168.47.149进行连接;
脚本:mariadb[none]> GRANT REPLICATION SLAVE ON*.* TO‘server02‘@‘192.168.47.179‘IDENTIFIED BY ‘server02‘;
mariadb[none]> select user,password,host from mysql.user; ---查看一下是否有授权的用户用于主从复制
2.2 修改mysql的参数文件
修改Mariadb01的参数文件,在MySQL的主配置文件默认为/etc/my.cnf,修改/添加如下内容
[mysql]
skip_name_resolve = on
innodb_file_per_table = on
max_connections = 20000
log_bin = bin-log ---开启二级制日志
relay_log = relay-log ---开启中继日志
server_id = 1
auto_increment_offset = 1 ---表示id号从1开始
auto_increment_increment = 2 ---表示以2为步进,即为奇数
修改之后,重启msyql生效:servicemysqld restart
修改Mariadb02的参数文件,在MySQL的主配置文件默认为/etc/my.cnf,修改/添加如下内容
[mysql]
skip_name_resolve = on
innodb_file_per_table = on
max_connections = 20000
server_id = 2
relay_log = relay-log
log_bin = bin-log
auto_increment_offset = 2
auto_increment_increment = 2
参数说明:
a、server_id数据库的进行数据同步的时候用于标识该语句最初是从哪个server写入的,在进行主主或主从的搭建中,都需要填写;
b、auto_increment_increment:在数据库应用,我们经常要用到唯一编号,以标识记录。在MySQL中可通过数据列的AUTO_INCREMENT属性来自动生成。为避免两台主数据库生成的编码重复了,所以需要设置该值
2.3复制其中的一台服务器的数据库到另外一台服务器
因为环境是全新搭建的,所以两个的环境都是一样的,并需要进行数据的初始化工作;
需要的话可以通过以下步骤进行操作,以Mariadb01为源数据库进行同步,如下操作:
2.3.1.锁定Mariadb01数据库,查看状态
mariadb[none]> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected(0.00 sec)
mariadb[none]> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position |Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000008 | 107| | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
显示源数据库处于8号binlog的107位置;
2.3.2.备份数据库
[[email protected]ariadb01~]# mysqldump--all-databases --lock-tables --flush-logs> /tmp/retail.sql
[[email protected]ariadb01 ~]# scp /tmp/retail.sql 192.168.47.178:/tmp/
2.3.3.在mysql02暂停二进制日志, 进行导入操作;
mariadb[none]< set @@session.sql_log_bin=0;
[[email protected] ~]# < /tmp/retail.sql#导入retail数据库
mariadb[none]< set @@session.sql_log_bin=1;
mariadb[none]> FLUSH TABLES WITH READ LOCK;
2.4.锁定mysql02数据库并查看状态
mysql> SHOW MASTERSTATUS;
+------------------+----------+--------------+------------------+
| File | Position |Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000009 | 107| | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
显示备份文件位于9号binlog的107位置;
2.5 进行主主的通信连接;
a、在Mariadb01上面进行用户和binlog的确认
mysql> CHANGE MASTERTOMASTER_HOST=‘192.168.47.178‘,MASTER_USER=‘server02‘,MASTER_PASSWORD=‘server02‘,MASTER_LOG_FILE=‘mysql-bin.000008‘,MASTER_LOG_POS=107;
mysql>start slave;
mysql> showslave status\G
b、在Mariadb02上面进行用户和binlog的确认
mysql> CHANGE MASTERTOMASTER_HOST=‘192.168.47.179‘,MASTER_USER=‘server01‘,MASTER_PASSWORD=‘server01‘,MASTER_LOG_FILE=‘mysql-bin.000009‘,MASTER_LOG_POS=107;
mysql>start slave;
mysql> showslave status\G
主要这两项:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
分别解锁Mariadb01、Mariadb02数据库
mariadb[none]> UNLOCK TABLES;
测试
在mysql01写入在mysql02上有显示
在mysql02写入在mysql01上有显示
复制时应该注意的问题:
1、从服务设定为“只读”:在从服务器启动read_only,但仅对非SUPER权限的用户有效;
要想阻止所有用户可以申请一个全局读锁:mysql>FLUSH TABLES WITH READ LOCK;
2、尽量确保复制时的事务安全
在master节点启用参数:sync_binlog=ON,表示只要当前节点有事物提交时就立即从内存缓冲区保存到二进制日志中,避免从服务器复制时二进制日志中没有这个提交操作主服务器就坏了,这样从服务器就不知道这个事物该不该提交了
如果用到的是InnoDB存储引擎:
innodb_flush_logs_at_trx_commit=ON ---每当事物提交时就同步到事物日志中
innodb_support_xa=ON 让innodb支持分布式事物
3、从服务器意外中止时尽量避免自动启动复制线程,假如从服务器在复制一个事件的时候复制到一半的时候从服务器意外终止了,如果重新启动,复制功能实是会自动开启的,因为在/var/lib/mysql/master.info文件中记录了连接到主服务器的信息,所以启动mariadb服务时会自动启动复制线程,这样就会造成问题,因为终止前的事物复制到一半,不知道该不该提交,为了避免这种事情发生,我们要把网断掉,查看一下是否有复制到一半的事物,如果有手动删除,然后手动加changemaster to 指向意外终止时主服务器二进制日志的位置,或者重新备份恢复后启动复制功能
4、从节点:设置参数
sync_master_info=ON
sync_relay_log_info=ON
本文出自 “13147015” 博客,请务必保留此出处http://13157015.blog.51cto.com/13147015/1981101
以上是关于linux自动备份网站和数据库,到另外服务器上,为当前用户创建定时任务的主要内容,如果未能解决你的问题,请参考以下文章