安裝基本工具(跳板機操做)mysql
yum install -y vim rsync lrzsz bzip2 unzip autoconf expect
給全部機器建立一個普通用戶, (跳板機操做)linux
### 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權限sql
# 公鑰文件爲 /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
添加簡單的命令審計功能shell
# 建立目錄存放歷史命令的目錄 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記錄的主機中。
安裝mysqlvim
# 將下載好的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
配置主從bash
# 啓動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;
備份策略app
Mysql備份使用xtrabackup工具 每週日執行一次全量備份。 每週一到週六執行增量備份。
備份腳本ssh
#!/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從服務器上,恢復後配置主從關係