安装基本工具(跳板机操做)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从服务器上,恢复后配置主从关系