zoukankan      html  css  js  c++  java
  • 安装部署mysql主从复制环境-检测主从服务并邮件报警

    安装部署mysql主从复制环境

    实验环境:centos7

    实验机器:2台

    主数据库:11.11.11.24

    从数据库:11.11.11.26

    主从复制的准备操作

    安装部署两台或多台mysql数据库

    yum -y install mariadb mariadb-server

    关闭防火墙和selinux

    systemctl stop firewalld.service  #关闭防火墙
    setenforce 0  #临时关闭selinux

    查看mysql的版本信息

    [root@localhost ~]# mysql -V
    mysql Ver 15.1 Distrib 5.5.65-MariaDB, for Linux (x86_64) using readline 5.1

    启动mysql服务,查看系统中是否存在mysql进程,并查看mysql的端口号

    [root@localhost ~]# systemctl start mariadb.service
    [root@localhost ~]# ss -anp |grep mysql
    u_str  LISTEN     0      50     /var/lib/mysql/mysql.sock 44299                 * 0                   users:(("mysqld",pid=3112,fd=15))
    tcp    LISTEN     0      50        *:3306                  *:*                   users:(("mysqld",pid=3112,fd=14))

    #ss命令可以用来获取socket统计信息,能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效

    修改mysql配置文件

     # 以下操作在主服务器上

    修改配置mysql的主配置文件  (主数据库)

    1.mysql主配置文件路径

    vim /etc/my.cnf


    2.配置文件内添加以下内容

    server-id=1 # 主数据库id为1 主从值不得相同
    log_bin=mysql-bin # 开启二进制日志
    
    :wq #保存退出



    3.重启mysql服务

    [root@localhost ~]# systemctl restart mariadb.service

    查看mysql二进制日志信息

    # 进入mysql
    
    mysql -uroot    # 原始情况下mysql中root默认的密码为空
    执行的命令;
    
    show master status;
    
    在mysql中新建数据库;
    
    create database name; 
    
    在mysql中新建用户并授权
    
    grant all on *.* to 'sjl'@'%' identified by '123';

    解释:   在master的数据库服务器中建立一个复制的账户,每个slave使用该账户链接master来进行复制,设置所有权限(根据具体情况自定)。

    上面创建了一个sjl用户,密码是123。只允许在所有段的ip地址的登录。

     
    修改配置mysql的主配置文件  (从数据库)


    1. mysql主配置文件路径

    vim /etc/my.cnf


    2.配置文件内添加以下内容

    server-id=2 # 主数据库id为1 主从值不得相同
    relay_log=relay-logs # 开启中继日志,可以自定义目录,mysql用户有权限即可
    
    :wq #保存退出

    3.重启mysql服务

    [root@localhost ~]# systemctl restart mariadb.service


    # 以下内容在数据库内操作

    查看中继日志的启动状态

    show global variables like '%relay%';


    连接master服务器

    MariaDB [(none)]> change master to
        -> master_host='11.11.11.24',
        -> master_user='sjl',
        -> master_password='123',
        -> master_log_file='mysql-bin.000001',
        -> master_log_pos=245;

    选项解释:

    master_host:master 服务器IP

    master_user:master 服务器授权用户,也就是 Master 前面创建的那个用户

    master_password:master 服务器授权用户对应的密码

    master_log_file:master binlog 文件名

    master_log_pos:master binlog 文件中的 Postion 值

    手动启动复制线程:

    start slave;


     mysql主从效果图

    MariaDB [(none)]> show slave status G;
    *************************** 1. row ***************************
                   Slave_IO_State: Connecting to master
                      Master_Host: 11.11.11.24
                      Master_User: sjl
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000001
              Read_Master_Log_Pos: 245
                   Relay_Log_File: relay-logs.000001
                    Relay_Log_Pos: 4
            Relay_Master_Log_File: mysql-bin.000001
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes

    两个进程都是Yes,为主从复制成功

     主从服务检测脚本

    前期准备工作

    安装邮件报警命令 mail

    yum -y install mailx

    配置 
    vi /etc/mail.rc  在文件尾加上如下配置 

    set from=*****@163.com  # 用那个邮箱发送
    set smtp=smtp.163.com
    set smtp-auth-user=*****@163.com  
    set smtp-auth-password=****   # 不是邮箱密码,是授权码
    set smtp-auth=login

    测试 

    [root@localhost ~]# echo "MySQL"|mail -s  mysql ****0@qq.com
                内容 | mail -s 标题 接收邮箱

     

    shell脚本

    #!/bin/bash
    # 数据库登录
    mysql="mysql -uroot -p1234"
    while true
    do
        # 检测关键字
        array=($($mysql -e "show slave statusG"|egrep '_Running:|Behind_Master|Last_SQL_Errno'|awk '{ print $NF }'))
            # 判断关键字
            if [ "${array[0]}" == "Yes" -a "${array[1]}" == "Yes" -a "${array[2]}" == "0" ]
            then
                # 运行正常的输出
                echo "MySQL 主从正常"
            else
                # 运行失败,发送报警信息
                echo "MySQL 主从服务 报错 管理员及时处理"|mail -s  mysql ******@qq.com
            break
        fi
        sleep 10
    done

    测试脚本运行效果

  • 相关阅读:
    DAO层的作用
    JSP+DAO中servlet的作用
    Linux常用命令
    数据结构与算法之动态规划
    JVM之垃圾回收机制
    单例模式详解
    线程池基础知识
    解决Spring MVC Controller中输出中文出现的乱码问题
    LinkedList与ArrayList的get(int index)方法区别
    黄清山 | 2021软件代码开发技术作业五 | 代码开发、测试及发布
  • 原文地址:https://www.cnblogs.com/sunjianlin/p/13133601.html
Copyright © 2011-2022 走看看