首页 > 数据库技术 > 详细

大作业环境部署和mysql布署和备份

时间:2018-08-19 21:49:01      阅读:204      评论:0      收藏:0      [点我收藏+]
大作业环境部署:

所有机器使用普通用户密钥认证登录,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布署和备份

原文:http://blog.51cto.com/13736286/2161664

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!