大作業環境部署和mysql布署和備份
阿新 • • 發佈:2018-08-19
false system pub chat root 屬組 標簽 zip spawn 大作業環境部署:
所有機器使用普通用戶密鑰認證登錄,root權限只能sudo
安裝基本工具(跳板機操作)
yum install -y vim rsync lrzsz bzip2 unzip autoconf expect
給所有機器創建一個普通用戶, (跳板機操作)
### vim /usr/local/sbin/useradd.expect # 腳本文件內容如下 #!/bin/expect set username "root" set password "password" set user "aminglinux" set host [lindex $argv 0] spwan ssh $username@$host expect { "yes/no" { send "yes\r";exp_countinue} "assword" { send "$password\r" } } expect "]*" send "useradd $user\r" expect "]*" send "exit\r" ### vim /usr/local/sbin/ip.list #內容如下 192.168.118.107 192.168.118.108 192.168.118.109 192.168.118.110 192.168.118.111 192.168.118.112 192.168.118.113 192.168.118.114 192.168.118.115 192.168.118.116 192.168.118.117 192.168.118.118 ### vim /usr/local/sbin/useradd.sh #!/bin/bash for i in `cat ip.list` do ./useradd.expect $i done ### 給兩個腳本添執行權限 chmod 755 useradd.sh useradd.expect ### 執行 useradd.sh 就會給ip.list中所有ip的主機都添加一個aminglinux用戶
創建密鑰認證,和sudo權限
# 公鑰文件為 /home/aminglinux/.ssh/authorize_keys # 私鑰文件為 /home/aminglinux/.ssh/id_rsa # 使用visudo 在最後添加一行 aminglinux ALL=(ALL) NOPASSWD:ALL # 編輯 /etc/ssh/sshd_config 文件修改以下內容 #PermitRootLogin yes 修改為 PermitRootLogin no #PasswordAuthentication yes 修改為 PasswordAuthentication no #PubkeyAuthentication yes 修改為 PubkeyAuthentication yes
添加簡單的命令審計功能
# 創建目錄存放歷史命令的目錄 mkdir /usr/local/command_history chown 777 /usr/local/command_history chattr +a /usr/local/commadn_history # 在/etc/profile 文件中最後添加以下內容 if [ ! -d /usr/local/command_history/${LOGNAME} ] then mkdir -p /usr/local/command_history/${LOGNAME} chmod 300 /usr/local/command_history/${LOGNAME} fi export HISTORY_FILE="/usr/local/command_history/${LOGNAME}/bash_history" export PROMPT_COMMAND=‘{ date "+%Y-%m-%d %T ##### $(who am i | awk "{print \$1\" \"\$2\" \"\$6}") ##### $(history 1 | { read x cmd; echo "$cmd"; })"; } >> $HISTORY_FILE‘
同步設置到所有主機
# 創建文件 /usr/local/sbin/file.list 存放需要同步的文件路徑,內容如下
/usr/local/command_history
/home/aminglinux/.ssh/authorized_keys
/home/aminglinux/.ssh/id_rsa
/etc/sudoers
/etc/profile
# 創建用於同步的expect腳本 /usr/local/sbin/rsync.expect 內容如下
#!/usr/bin/expect
set host [lindex $argv 0]
set file [lindex $argv 1]
set user "root"
set password "password"
spawn rsync -avR --files-from=$file / $user@$host:/
expect {
"yes/no" { send "yes\r"; exp_countinue }
"assword" { send "$password\r" }
}
interact
# 創建用於同步的shell腳本 /usr/local/sbin/rsync.sh 內容如下
#!/bin/bash
for i in `cat ip.list`
do
./rsync.expect $i
done
### 給兩個腳本添執行權限
chmod 755 rsync.expect rsync.sh
### 執行 rsync.sh 就會將file.list 中記錄的所有文件同步到所有ip.list記錄的主機中。
安裝mysql,配置主從,安裝mycat,配置讀寫分離。
安裝mysql
# 將下載好的mysql二進制包同步到 192.168.118.111主機上
# 解壓二進制包,並且將擠壓後的二進制包移動到/usr/local/目錄下, 重命名為mysql
cd /usr/local/src
tar -zxvf mysql-5.6.41-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.6.41-linux-glibc2.12-x86_64 /usr/local/mysql
# 創建datadir
mkdir -p /data/mysql
# 創建 mysql用戶
useradd mysql -Ms /sbin/nologin
# 進入 /usr/local/mysql 目錄,初始化數據庫
cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql
# 修改datadir 和 basedir 的屬主和屬組
chown mysql.mysql /data/mysql /usr/local/mysql -R
# 復制mysql 啟動腳本到 /etc/init.d/目錄下
cp cp support-files/mysql.server /etc/init.d/mysqld
# 編輯啟動腳本, 設置對應的 datadir 和 basedir
# 添加到 chkconfig 管理 並設置開機自啟動
chkconfig --add mysqld
chkconfig mysql on
# 編輯 /etc/my.cnf 內容如下
[mysqld]
port = 3306
basedir=/usr/local/mysql
datadir=/data/mysql/
socket=/tmp/mysql.sock
user=mysql
default-time-zone=system
default-storage-engine=InnoDB
log-error=/var/log/mysqld.log
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
server-id=111
log_bin=ABcopy
character_set_server = utf8
slow_query_log = ON
slow_query_log_file = /tmp/slow.log
long_query_time = 2
# 啟動mysql
service mysqld start
# 設置mysql命令環境變量
echo "export PATH=/usr/local/mysql/bin:$PATH" >> /etc/porfile
source /etc/profile
# 修改mysql密碼
mysqladmin -uroot password "123456"
# 啟動成功的話,就可以先停止mysqld 然後將以文件同步到192.168.118.112和192.168.118.113
/usr/local/mysql/
/etc/my.cnf
/etc/init.d/mysqld
/data/mysql
配置主從
# 啟動111,112,113 三臺主機的mysql服務
# 先進入111主機的mysql命令行 ,創建一個用於主從同步的用戶
# mysql -uroot -p123456
mysql> grant replication slave on *.* to ‘repl‘@‘192.168.118.%‘ identified by ‘123456‘;
# 鎖表
mysql> flush tables with read lock;
# 查看master狀態
mysql show master starus;
# 再編輯112主機的/etc/my.cnf 配置文件
將server-id=111 改為 server-id=112
# 重啟mysqld服務,進入mysql命令行進行slave配置
# 停止slave
mysql> stop slave;
# 配置slave參數
mysql> change master to master_host=‘192.168.118.111‘, master_user=‘repl‘, master_password=‘123456‘, master_log_file=‘abcopy.000001‘, master_log_pos=661858;
# 開啟slave
mysql> start slave
# 在解除111主機的鎖表狀態
mysql> unlock tables;
# 在112主機查看主從狀態是否OK
mysql> show slave status\G
### 113主機將/etc/my.cnf配置文件中的server-id改為113即可,其他的與112主機的操作相同
### 在111主機的mysql命令行創建庫,授權對應的用戶
mysql> create database ultrax;
mysql> create database dedecms;
mysql> create database zrlog;
mysql> create zabbix;
mysql> grant all on *.* to ‘mycat‘@‘192.168.118.108‘ identified by ‘123456‘
mysql> grant all on ultrax.* to ‘discuz‘@‘192.168.118.%‘ identified by ‘123456‘
mysql> grant all on dedecms.* to ‘dedecms‘@‘192.168.118.%‘ identified by ‘123456‘
mysql> grant all on zrlog.* to ‘zrlog‘@‘192.168.118.%‘ identified by ‘123456‘
mysql> grant all on zabbix.* to ‘zabbix‘@‘192.168.118.%‘ identified by ‘123456‘
配置mycat
# mycat服務需要JDK環境,
# 首先將下載好的JDK和Mycat的二進制包同步到192.168.118.108主機的 /usr/local/src 目錄下
# 解壓JDK安裝包後移動到/usr/local/jdk8
# 配置JDK環境變量,在/etc/profile 文件內容末尾添加以下內容
JAVA_HOME=/usr/local/jdk1.8/
JAVA_BIN=/usr/local/jdk1.8/bin
JRE_HOME=/usr/local/jdk1.8/jre
PATH=$PATH:/usr/local/jdk1.8/bin:/usr/local/jdk1.8/jre/bin
CLASSPATH=/usr/local/jdk1.8/jre/lib:/usr/local/jdk1.8/lib:/usr/local/jdk1.8/jre/lib/charsets.jar
# 解壓Mycat二進制包,然後移動到/usr/local/mycat
# 編輯配置文件 /usr/local/mycat/conf/server.xml 在最後的</mycat:server> 標簽之前添加以下內容
<user name="mycat">
<property name="password">123456</property>
<property name="schemas">ultrax,dedecms,zrlog,zabbix</property>
</user>
<user name="zabbix">
<property name="password">123456</property>
<property name="schemas">zabbix</property>
</user>
<user name="discuz">
<property name="password">123456</property>
<property name="schemas">ultrax</property>
</user>
<user name="dedecms">
<property name="password">123456</property>
<property name="schemas">dedecms</property>
</user>
<user name="zrlog">
<property name="password">123456</property>
<property name="schemas">zrlog</property>
</user>
<user name="user">
<property name="password">123456</property>
<property name="schemas">ultrax,dedecms,zrlog,zabbix</property>
<property name="readOnly">true</property>
</user>
# 備份/usr/local/mycat/conf/schema.xml配置文件
cp /usr/local/mycat/conf/schema.xml /usr/local/mycat/conf/schema.xml.bak
# 編輯配置文件/usr/local/mycat/conf/schema.xml,清空全部內容後添加以下內容
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="ultrax" checkSQLschema="false" sqlMaxLimit="1000" dataNode="dn1" />
<schema name="dedecms" checkSQLschema="false" sqlMaxLimit="1000" dataNode="dn2" />
<schema name="zrlog" checkSQLschema="false" sqlMaxLimit="1000" dataNode="dn3" />
<schema name="zabbix" checkSQLschema="false" sqlMaxLimit="1000" dataNode="dn4" />
<dataNode name="dn1" dataHost="localhost1" database="ultrax" />
<dataNode name="dn2" dataHost="localhost1" database="dedecms" />
<dataNode name="dn3" dataHost="localhost1" database="zrlog" />
<dataNode name="dn4" dataHost="localhost1" database="zabbix" />
<dataHost name="localhost1" maxCon="2000" minCon="1" balance="3"
writeType="1" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.118.111:3306" user="mycat" password="123456">
<!-- can have multi read hosts -->
<readHost host="hostS1" url="192.168.118.112:3306" user="mycat" password="123456" />
<readHost host="hostS2" url="192.168.118.113:3306" user="mycat" password="123456" />
</writeHost>
</dataHost>
</mycat:schema>
# 啟動mycat服務
/usr/local/mycat/bin/mycat start
# 查看8066和8099端口是否起來,8066是連接數據庫的端口, 8099是mycat管理端口
netstat -lntup
# yum 安裝一個mysql命令 , 試試通過mycat能否正常鏈接到mysql
yum install -y mysql
mysql -umycat -p123456 -P8066
# 能正常鏈接,並且mycat用戶只能看到4個配置過的數據庫, 表示mycat配置成功了
# 登錄管理端口查看數據源
mysql -umycat -p123456 -h192.168.118.108 -P9066
mysql> show @@datasource;
MySQL 備份恢復策略
備份策略
Mysql備份使用xtrabackup工具
每周日執行一次全量備份。
每周一到周六執行增量備份。
備份腳本
#!/bin/bash
#獲取當天是周幾
week=`date +%w`
#全量備份目錄
full_dir=/data/backup/mysql/xfull/
#增量備份目錄
inc_dir=/data/backup/mysql/inc/
if [ $week -eq 0 ] || ! `ls $full_dir | grep -q ‘.‘`
then
#如果是周日,或者全量備份目錄為空,執行全量備份
innobackupex --default-file=/etc/my.cnf --user=root --password=123456 /data/backup/mysql/xfull
exit
elif [ $week -eq 1 ] || ! `ls $inc_dir | grep -q ‘.‘`
then
#如果是周一,或者增量備份目錄為空,獲取前一次全量備份的目錄,進行增量備份
last_dir=`ls -ltr $full_dir|tail -1`
innobackupex --default-file=/etc/my.cnf --user=root --password=123456 --incemental $inc_dir --incremental-basedir=$full_dir
exit
else
#周二到周六,獲取最後一次增量備份目錄,然後基於上一次增量備份再次增量備份
last_dir=`ls -ltr $inc_dir|tail -1`
innobackupex --default-file=/etc/my.cnf --user=root --password=123456 --incemental $inc_dir --incremental-basedir=$last_dir
fi
恢復方案
# 恢復前需要執行apply-log 應用未提交的事物,確保數據的一致性
# 第一步:應用全量備份 , 最後面是全量備份的路徑
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log --redo-only /data/backup/mysql/xfull/2018-08-16_15-00-42/
# 第二步,應用所有增量備份,-,一次只能指定一個增量備份,並且必須按照先後順序執行
# -incremental-dir指定增量備份的路徑
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log --redo-only /data/backup/mysql/xfull/2018-08-16_15-00-42/ --incremental-dir=/data/backup/mysql/inc/2018-08-16_15-38-45
# 第三步,執行完整數據恢復
innobackupex --defaluts-file=/etc/my.cnf --user=root --password=123456 --copy-back /data/backup/mysql/xfull/2018-08-16_15-00-42/
# 第四步,恢復後修改datadir的屬主和屬組
chown mysql.mysql /data/mysql -R
# 第五步,將最後應用了增量備份的全量備份同步到mysql從服務器上,恢復後配置主從關系
大作業環境部署和mysql布署和備份