大作業環境部署和mysql佈署和備份

大作業環境部署:

所有機器使用普通用戶密鑰認證登錄,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從服務器上,恢復後配置主從關係
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章