zoukankan      html  css  js  c++  java
  • mysql 架构安装部署及操作

    搭建流程

    1、安装mysql5726

    实现
    功能
    10.0.0.65 10.0.0.66 10.0.0.67
    name 65 66 67
    host 10.0.0.65 65
    10.0.0.66 66
    10.0.0.67 67
    10.0.0.65 65
    10.0.0.66 66
    10.0.0.67 67
    10.0.0.65 65
    10.0.0.66 66
    10.0.0.67 67
    gtid复制 主库 从库 从库
    高可用 vip - mha
    邮箱报警 读写分离 -

    656667

    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    yum install -y libaio-devel
    mkdir -p /server/tools
    cd /server/tools/
    mkdir /application
    # wget http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
    tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz 
    mv mysql-5.7.26-linux-glibc2.12-x86_64  /application/mysql
    yum remove mariadb-libs-5.5.60-1.el7_5.x86_64 -y
    rpm -qa |grep mariadb
    useradd -s /sbin/nologin mysql
    #设置环境变量
    echo "export PATH=/application/mysql/bin:$PATH" >>/etc/profile
    source /etc/profile
    mysql -V
    #创建数据路径并授权
    #1. 添加一块新磁盘模拟数据盘
    #2. 格式化并挂载磁盘
    # mkfs.xfs /dev/sdb
    # mkdir /data
    # blkid
    # vim /etc/fstab 
    # UUID="b21ec3e0-e251-4ded-bc12-2d940f938dd5" /data xfs defaults 0 0
    # mount -a
    # df -h
    chown -R mysql.mysql /application/*
    #初始化数据(创建系统数据)
    # 5.6 版本 初始化命令  /application/mysql/scripts/mysql_install_db 
    # 5.7 版本
    mkdir /data/mysql/data -p 
    chown -R mysql.mysql /data
    mysqld --initialize --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data  #自动创建密码
    mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data   #无密码
    
    cat >/etc/systemd/system/mysqld.service <<EOF
    [Unit]
    Description=MySQL Server
    Documentation=man:mysqld(8)
    Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
    After=network.target
    After=syslog.target
    [Install]
    WantedBy=multi-user.target
    [Service]
    User=mysql
    Group=mysql
    ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf
    LimitNOFILE = 5000
    EOF
    
    mkdir /data/mysql/data/binlog
    chown -R mysql.mysql /data
    

    65

    cat > /etc/my.cnf <<EOF
    [mysqld]
    basedir=/application/mysql/
    datadir=/data/mysql/data
    socket=/tmp/mysql.sock
    server_id=65
    port=3306
    secure-file-priv=/tmp
    autocommit=0
    log_bin=/data/mysql/data/binlog/mysql-bin
    binlog_format=row
    gtid-mode=on
    enforce-gtid-consistency=true
    log-slave-updates=1
    [mysql]
    prompt=65 [\d]>
    EOF
    systemctl restart mysqld
    systemctl status mysqld
    

    66

    cat > /etc/my.cnf <<EOF
    [mysqld]
    basedir=/application/mysql
    datadir=/data/mysql/data
    socket=/tmp/mysql.sock
    server_id=66
    port=3306
    secure-file-priv=/tmp
    autocommit=0
    log_bin=/data/mysql/data/binlog/mysql-bin
    binlog_format=row
    gtid-mode=on
    enforce-gtid-consistency=true
    log-slave-updates=1
    [mysql]
    prompt=66 [\d]>
    EOF
    systemctl restart mysqld
    systemctl status mysqld
    

    67

    cat > /etc/my.cnf <<EOF
    [mysqld]
    basedir=/application/mysql
    datadir=/data/mysql/data
    socket=/tmp/mysql.sock
    server_id=67
    port=3306
    secure-file-priv=/tmp
    autocommit=0
    log_bin=/data/mysql/data/binlog/mysql-bin
    binlog_format=row
    gtid-mode=on
    enforce-gtid-consistency=true
    log-slave-updates=1
    [mysql]
    prompt=67 [\d]>
    EOF
    systemctl restart mysqld
    systemctl status mysqld
    

    gtid主从复制

    65

    mysql -e "grant replication slave on *.* to repl@'10.0.0.%' identified by '123';"
    

    6667

    mysql -e "change master to master_host='10.0.0.65',master_user='repl',master_password='123' ,MASTER_AUTO_POSITION=1;start slave; "
    mysql -e "show slave status G"|grep Yes
    

    高可用

    656667

    ln -s /application/mysql/bin/mysqlbinlog    /usr/bin/mysqlbinlog
    ln -s /application/mysql/bin/mysql          /usr/bin/mysql
    

    65

    rm -rf /root/.ssh 
    /bin/ssh-keygen -t rsa -f /root/.ssh/id_rsa  -P ""
    sshpass -p123456 ssh-copy-id -i ~/.ssh/id_rsa.pub 10.0.0.66 -o StrictHostKeyChecking=no
    sshpass -p123456 ssh-copy-id -i ~/.ssh/id_rsa.pub 10.0.0.67 -o StrictHostKeyChecking=no
    mysql -e "grant all privileges on *.* to mha@'10.0.0.%' identified by 'mha';"
    

    656667

    ssh 10.0.0.65 date
    ssh 10.0.0.66 date
    ssh 10.0.0.67 date
    yum install perl-DBD-MySQL -y
    rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
    

    67

    yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
    rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm
    
    #创建配置文件目录
     mkdir -p /etc/mha
    #创建日志目录
     mkdir -p /var/log/mha/app1
    #编辑mha配置文件
    cat > /etc/mha/app1.cnf<<EOF
    [server default]
    manager_log=/var/log/mha/app1/manager        
    manager_workdir=/var/log/mha/app1            
    master_binlog_dir=/data/mysql/data/binlog       
    user=mha                                   
    password=mha                               
    ping_interval=2
    repl_password=123
    repl_user=repl
    ssh_user=root                               
    [server1]                                   
    hostname=10.0.0.65
    port=3306                                  
    [server2]            
    hostname=10.0.0.66
    port=3306
    [server3]
    hostname=10.0.0.67
    port=3306
    EOF
    masterha_check_ssh  --conf=/etc/mha/app1.cnf 
    masterha_check_repl  --conf=/etc/mha/app1.cnf 
    #开启MHA(db03):
    nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /var/log/mha/app1/manager.log 2>&1 &
    #查看MHA状态
    masterha_check_status --conf=/etc/mha/app1.cnf
    

    mha的VIP功能

    67

    cd /usr/local/bin/
    rz master_ip_failover
    dos2unix /usr/local/bin/master_ip_failover 
    chmod +x /usr/local/bin/master_ip_failover 
    vim  /usr/local/bin/master_ip_failover
    my $vip = '10.0.0.55/24';
    my $key = '1';
    my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
    my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
    # 
    vim /etc/mha/app1.cnf
    添加:
    master_ip_failover_script=/usr/local/bin/master_ip_failover
    

    65

    ifconfig eth0:1 10.0.0.55/24
    

    67

    masterha_stop --conf=/etc/mha/app1.cnf
    nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
    

    邮件报警

    67

    cd /usr/local/bin/
    rz send  sendEmail  testpl
    vim testpl  #修改报警邮箱
    vim /etc/mha/app1.cnf
    # 添加一行
    report_script=/usr/local/bin/send
    #重启mha
    masterha_stop --conf=/etc/mha/app1.cnf
    nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
    

    2.读写分离

    主库

    yum install -y Atlas*
    cd /usr/local/mysql-proxy/conf
    mv test.cnf test.cnf.bak
     vi test.cnf
    [mysql-proxy]
    admin-username = user
    admin-password = pwd
    proxy-backend-addresses = 10.0.0.55:3306
    proxy-read-only-backend-addresses = 10.0.0.66:3306,10.0.0.67:3306
    pwds = repl:3yb5jEku5h4=,mha:O2jBXONX098=
    daemon = true
    keepalive = true
    event-threads = 8
    log-level = message
    log-path = /usr/local/mysql-proxy/log
    sql-log=ON
    proxy-address = 0.0.0.0:33060
    admin-address = 0.0.0.0:2345
    charset=utf8
    # 启动atlas
        /usr/local/mysql-proxy/bin/mysql-proxyd test start
        ps -ef |grep proxy
    # 3. Atlas功能测试
    # 测试读操作:
    mysql -umha -pmha  -h 10.0.0.55 -P 33060
    66 [(none)]>select @@server_id;
    +-------------+
    | @@server_id |
    +-------------+
    |          67 |
    +-------------+
    1 row in set (0.00 sec)
    
    66 [(none)]>select @@server_id;
    +-------------+
    | @@server_id |
    +-------------+
    |          65 |
    +-------------+
    1 row in set (0.00 sec)
    # 测试写操作:
    66 [(none)]>begin;select @@server_id;commit;
    Query OK, 0 rows affected (0.00 sec)
    
    +-------------+
    | @@server_id |
    +-------------+
    |          66 |
    +-------------+
    1 row in set (0.00 sec)
    
    Query OK, 0 rows affected (0.00 sec)
    
    66 [(none)]>begin;select @@server_id;commit;
    Query OK, 0 rows affected (0.00 sec)
    
    +-------------+
    | @@server_id |
    +-------------+
    |          66 |
    +-------------+
    1 row in set (0.00 sec)
    
    Query OK, 0 rows affected (0.00 sec)
    
    

    测试ip漂移

    查看vip
    [root@65 /server/tools]# ip a |grep eth0
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        inet 10.0.0.65/24 brd 10.0.0.255 scope global noprefixroute eth0
        inet 10.0.0.55/24 brd 10.0.0.255 scope global secondary eth0:1
    
    
    #登录66
    
    mysql -e "show slave statusG"
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 10.0.0.65                    //主库是51
                      Master_User: rep
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000007
              Read_Master_Log_Pos: 191
                   Relay_Log_File: mysql-db02-relay-bin.000002
                    Relay_Log_Pos: 361
            Relay_Master_Log_File: mysql-bin.000007
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                
    #停掉主库 65
     systemctl stop mysqld                 //停掉主库Mysql测试
    # 切换到从库67上查看
    mysql -e "show slave statusG"
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 10.0.0.66                   //主库切换到52
                      Master_User: rep
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000006
              Read_Master_Log_Pos: 191
                   Relay_Log_File: mysql-db03-relay-bin.000002
                    Relay_Log_Pos: 361
            Relay_Master_Log_File: mysql-bin.000006
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                
    #在65上查看vip信息
     ip a |grep eth0     //vip没有了
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        inet 10.0.0.65/24 brd 10.0.0.255 scope global noprefixroute eth0
    
    #在66上查看vip信息
    [root@mysql-db02 ~]# ip a |grep eth0    //db02出现vip55
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        inet 10.0.0.52/24 brd 10.0.0.255 scope global eth0
        inet 10.0.0.55/24 brd 10.0.0.255 scope global secondary eth0:0
    # VIP漂移测试成功
    
    nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 & 
    //后台运行mha
    
    
    masterha_check_repl --conf=/etc/mha/app1.cnf                         //测试mha复制
    MySQL Replication Health is OK
    [root@db03 mha]# masterha_check_status --conf=/etc/mha/app1.cnf       //检测mha状态,db03查看主库是否切换66
    app1 (pid:9849) is running(0:PING_OK), master:10.0.0.66
    # mha工作正常
    
    
  • 相关阅读:
    那些年读过的书《Java并发编程实战》和《Java并发编程的艺术》三、任务执行框架—Executor框架小结
    那些年读过的书《Java并发编程实战》二、如何设计线程安全类
    那些年读过的书《Java并发编程实战》一、构建线程安全类和并发应用程序的基础
    重读《深入理解Java虚拟机》七、探究Java内存模型
    重读《深入理解Java虚拟机》六、Java泛型 VS C#泛型 (伪泛型 VS 真泛型)
    重读《深入理解Java虚拟机》五、虚拟机如何执行字节码?程序方法如何被执行?虚拟机执行引擎的工作机制
    重读《深入理解Java虚拟机》四、虚拟机如何加载Class文件
    input 文本框禁止输入表情
    win7右下角无线网图标显示未连接,但是实际上已连接上,也能上网
    history.back(-1)和history.go(-1)的区别
  • 原文地址:https://www.cnblogs.com/jiangyatao/p/11371462.html
Copyright © 2011-2022 走看看