美文网首页
mysql练习二

mysql练习二

作者: jamas | 来源:发表于2020-04-10 00:02 被阅读0次

编写脚本,支持让用户自主选择,使用mysqldump还是xtraback全量备份。

vim backup.sh
backupdir=/data/backup
yum install -y xtrabackup &> /dev/null
read -p "please choose the backup tool? mysqldump or xtrabackup: " tool
case $tool in
mysqldump)
        mysqldump -A -F --single-transaction --master-data=2 > $backupdir/dump`date +%F`.sql
        echo "The databases have been backuped to $backupdir by mysqldump! "
        ;;
xtrabackup)
        xtrabackup --backup --target-dir=$backupdir/xtrabackup`date +%F` &> /dev/null
        echo "The databases have been backuped to $backupdir by xtrabackup! "
        ;;
*)
        echo "something wrong! please type mysqldump or xtrabackup!"
        exit 10
        ;;
esac

Mysql主从同步

实验环境:

主节点(node1):centos7.6 yum安装mariadb ip:172.16.2.131
从节点(node2):centos7.6 yum安装mariadb ip:172.16.2.132

主节点配置

vim /etc/my.cnf   //编辑配置文件
[mysqld]
log-bin  //启用二进制日志
server-id=1  //设置server-id,此ip要保证唯一性
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
systemctl restart mariadb  //重启服务
MariaDB [(none)]> grant replication slave on *.* to repluser@'172.16.2.%' identified by '123456'; //创建同步账号
MariaDB [(none)]> show master logs; //查看二进制日志文件及pos位置
+--------------------+-----------+
| Log_name           | File_size |
+--------------------+-----------+
| mariadb-bin.000001 |       245 |
+--------------------+-----------+
1 row in set (0.00 sec)

从节点配置

vim /etc/my.cnf   //编辑配置文件
[mysqld]
server-id=2  //设置server-id,此ip要保证唯一性
read-only   //开启只读
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
systemctl restart mariadb   //重启服务
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST = '172.16.2.131', MASTER_USER = 'repluser', MASTER_PASSWORD = '123456', MASTER_LOG_FILE= 'mariadb-bin.000001', MASTER_LOG_POS = 245;
Query OK, 0 rows affected (0.11 sec)  //根据主节点信息添加

MariaDB [(none)]> start slave;  //启动slave功能
Query OK, 0 rows affected (0.00 sec)

验证

MariaDB [(none)]> show slave status\G   //查看从节点slave 状态
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.16.2.131
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mariadb-bin.000002
          Read_Master_Log_Pos: 320
               Relay_Log_File: mariadb-relay-bin.000003
                Relay_Log_Pos: 606
        Relay_Master_Log_File: mariadb-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 320
              Relay_Log_Space: 1188
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
1 row in set (0.00 sec)

MariaDB [mysql]> create database db1; //在主节点创建一个数据库
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> show databases;  //从节点也可以看到新建的数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db1                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

使用MHA实现Mysql高可用

实验环境:

主节点 (node1): centos7.6 安装mariadb mha4mysql-node ip:172.16.2.131
从节点1(node2): centos7.6 安装mariadb mha4mysql-node ip:172.16.2.132
从节点2(node3): centos7.6 安装mariadb mha4mysql-node ip:172.16.2.132
管理节点(node4): centos7.6 安装mha4mysql-node mha4mysql-manager ip:172.16.2.132

  • 在所有节点实现相互之间ssh key验证

1.实现主从复制

主节点配置

[root@node1 yum.repos.d]# vim /etc/my.cnf //编辑配置文件
[mysqld]
log-bin  //启用二进制日志
server-id=1  //设置server-id,此ip要保证唯一性
skip_name_resolve  //跳过dns解析
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
[root@node1 yum.repos.d]# systemctl restart mariadb  //重启服务
MariaDB [(none)]> grant replication slave on *.* to repluser@'172.16.2.%' identified by '123456' //创建同步账号
MariaDB [(none)]> grant all on *.* to mhauser@'172.16.2.%' identified by '123456'; //创建mha管理账号
[root@node2 ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y  //安装mha4mysql-node

从节点1配置:

[root@node2 yum.repos.d]# vim /etc/my.cnf//编辑配置文件
[mysqld]
server-id=2  //设置server-id,此ip要保证唯一性
read-only  //设置只读
log-bin   //启用二进制日志
relay_log_purge=0  //不自动清理中继日志
skip_name_resolve  //跳过dns解析
[root@node2 yum.repos.d]# systemctl restart mariadb
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST = '172.16.2.131', MASTER_USER = 'repluser', MASTER_PASSWORD = '123456', MASTER_LOG_FILE= 'mariadb-bin.000001', MASTER_LOG_POS = 245;
[root@node2 ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y  //安装mha4mysql-node

2.管理端配置

[root@node4 ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm mha4mysql-manager-0.56-0.el6.noarch.rpm //安装mha4mysql-node mha4mysql-manager
[root@node4 ~]# vim /etc/mastermha/app.cnf  //编辑mha配置文件
[server default]
user=mhauser  //mysql中创建的mha管理账号
password=123456
manager_workdir=/data/mastermha/app/
manager_log=/data/mastermha/app/manager.log //日志位置
remote_workdir=/data/mastermha/app/
ssh_user=root  //管理各个主机所有账号
repl_user=repluser //mysql同步账号
repl_password=123456
ping_interval=1


[server1]  //加入各个MYSQL节点
hostname=172.16.2.131
candidate_master=1   //master候选
[server2]
hostname=172.16.2.132
candidate_master=1
[server3]
hostname=172.16.2.137

[root@node4 ~]# masterha_manager --conf=/etc/mastermha/app.cnf  //启动程序

3.模拟故障,查看效果

将主节点关机,模拟故障。

查看mha日志

[root@node4 ~]# cat  /data/mastermha/app/manager.log  //查看日志
Thu Apr  9 21:08:26 2020 - [info] Dead Servers:
Thu Apr  9 21:08:26 2020 - [info]   172.16.2.131(172.16.2.131:3306)  //主节点故障
Thu Apr  9 21:08:26 2020 - [info] Checking master reachability via MySQL(double check)...
Thu Apr  9 21:08:27 2020 - [info]  ok.
Thu Apr  9 21:08:27 2020 - [info] Alive Servers:
Thu Apr  9 21:08:27 2020 - [info]   172.16.2.132(172.16.2.132:3306)
Thu Apr  9 21:08:27 2020 - [info]   172.16.2.137(172.16.2.137:3306)
Thu Apr  9 21:08:27 2020 - [info] Alive Slaves:
Thu Apr  9 21:08:27 2020 - [info]   172.16.2.132(172.16.2.132:3306)  Version=5.5.64-MariaDB (oldest major version between slaves) log-bin:enabled
Thu Apr  9 21:08:27 2020 - [info]     Replicating from 172.16.2.131(172.16.2.131:3306)
Thu Apr  9 21:08:27 2020 - [info]     Primary candidate for the new Master (candidate_master is set)
Thu Apr  9 21:08:27 2020 - [info]   172.16.2.137(172.16.2.137:3306)  Version=5.5.64-MariaDB (oldest major version between slaves) log-bin:enabled
Thu Apr  9 21:08:27 2020 - [info]     Replicating from 172.16.2.131(172.16.2.131:3306)
Thu Apr  9 21:08:27 2020 - [info] Starting Non-GTID based failover.
Thu Apr  9 21:08:27 2020 - [info]
Thu Apr  9 21:08:27 2020 - [info] ** Phase 1: Configuration Check Phase completed.
Thu Apr  9 21:08:27 2020 - [info]
Thu Apr  9 21:08:27 2020 - [info] * Phase 2: Dead Master Shutdown Phase..
Thu Apr  9 21:08:27 2020 - [info]
Thu Apr  9 21:08:27 2020 - [info] Forcing shutdown so that applications never connect to the current master..
Thu Apr  9 21:08:27 2020 - [warning] master_ip_failover_script is not set. Skipping invalidating dead master IP address.
Thu Apr  9 21:08:27 2020 - [warning] shutdown_script is not set. Skipping explicit shutting down of the dead master.
Thu Apr  9 21:08:28 2020 - [info] * Phase 2: Dead Master Shutdown Phase completed.
Thu Apr  9 21:08:28 2020 - [info]
Thu Apr  9 21:08:28 2020 - [info] * Phase 3: Master Recovery Phase..
Thu Apr  9 21:08:28 2020 - [info]
Thu Apr  9 21:08:28 2020 - [info] * Phase 3.1: Getting Latest Slaves Phase..
Thu Apr  9 21:08:28 2020 - [info]
Thu Apr  9 21:08:28 2020 - [info] The latest binary log file/position on all slaves is mariadb-bin.000003:521
Thu Apr  9 21:08:28 2020 - [info] Latest slaves (Slaves that received relay log files to the latest):
Thu Apr  9 21:08:28 2020 - [info]   172.16.2.132(172.16.2.132:3306)  Version=5.5.64-MariaDB (oldest major version between slaves) log-bin:enabled
Thu Apr  9 21:08:28 2020 - [info]     Replicating from 172.16.2.131(172.16.2.131:3306)
Thu Apr  9 21:08:28 2020 - [info]     Primary candidate for the new Master (candidate_master is set)
Thu Apr  9 21:08:28 2020 - [info]   172.16.2.137(172.16.2.137:3306)  Version=5.5.64-MariaDB (oldest major version between slaves) log-bin:enabled
Thu Apr  9 21:08:28 2020 - [info]     Replicating from 172.16.2.131(172.16.2.131:3306)
Thu Apr  9 21:08:28 2020 - [info] The oldest binary log file/position on all slaves is mariadb-bin.000003:521
Thu Apr  9 21:08:28 2020 - [info] Oldest slaves:
Thu Apr  9 21:08:28 2020 - [info]   172.16.2.132(172.16.2.132:3306)  Version=5.5.64-MariaDB (oldest major version between slaves) log-bin:enabled
Thu Apr  9 21:08:28 2020 - [info]     Replicating from 172.16.2.131(172.16.2.131:3306)
Thu Apr  9 21:08:28 2020 - [info]     Primary candidate for the new Master (candidate_master is set)
Thu Apr  9 21:08:28 2020 - [info]   172.16.2.137(172.16.2.137:3306)  Version=5.5.64-MariaDB (oldest major version between slaves) log-bin:enabled
Thu Apr  9 21:08:28 2020 - [info]     Replicating from 172.16.2.131(172.16.2.131:3306)
Thu Apr  9 21:08:28 2020 - [info]
Thu Apr  9 21:08:28 2020 - [info] * Phase 3.2: Saving Dead Master's Binlog Phase..
Thu Apr  9 21:08:28 2020 - [info]
Thu Apr  9 21:08:28 2020 - [warning] Dead Master is not SSH reachable. Could not save it's binlogs. Transactions that were not sent to the latest slave (Read_Master_Log_Pos to the tail of the dead master's binlog) were lost.
Thu Apr  9 21:08:28 2020 - [info]
Thu Apr  9 21:08:28 2020 - [info] * Phase 3.3: Determining New Master Phase..
Thu Apr  9 21:08:28 2020 - [info]
Thu Apr  9 21:08:28 2020 - [info] Finding the latest slave that has all relay logs for recovering other slaves..
Thu Apr  9 21:08:28 2020 - [info] All slaves received relay logs to the same position. No need to resync each other.
Thu Apr  9 21:08:28 2020 - [info] Searching new master from slaves..
Thu Apr  9 21:08:28 2020 - [info]  Candidate masters from the configuration file:
Thu Apr  9 21:08:28 2020 - [info]   172.16.2.132(172.16.2.132:3306)  Version=5.5.64-MariaDB (oldest major version between slaves) log-bin:enabled
Thu Apr  9 21:08:28 2020 - [info]     Replicating from 172.16.2.131(172.16.2.131:3306)
Thu Apr  9 21:08:28 2020 - [info]     Primary candidate for the new Master (candidate_master is set)
Thu Apr  9 21:08:28 2020 - [info]  Non-candidate masters:
Thu Apr  9 21:08:28 2020 - [info]  Searching from candidate_master slaves which have received the latest relay log events..
Thu Apr  9 21:08:28 2020 - [info] New master is 172.16.2.132(172.16.2.132:3306)  //从节点1变为新的主服务器
Thu Apr  9 21:08:28 2020 - [info] Starting master failover..
Thu Apr  9 21:08:28 2020 - [info]
From:
172.16.2.131(172.16.2.131:3306) (current master)
 +--172.16.2.132(172.16.2.132:3306)
 +--172.16.2.137(172.16.2.137:3306)

To:
172.16.2.132(172.16.2.132:3306) (new master)
 +--172.16.2.137(172.16.2.137:3306)
Thu Apr  9 21:08:28 2020 - [info]
Thu Apr  9 21:08:28 2020 - [info] * Phase 3.3: New Master Diff Log Generation Phase..
Thu Apr  9 21:08:28 2020 - [info]
Thu Apr  9 21:08:28 2020 - [info]  This server has all relay logs. No need to generate diff files from the latest slave.
Thu Apr  9 21:08:28 2020 - [info]
Thu Apr  9 21:08:28 2020 - [info] * Phase 3.4: Master Log Apply Phase..
Thu Apr  9 21:08:28 2020 - [info]
Thu Apr  9 21:08:28 2020 - [info] *NOTICE: If any error happens from this phase, manual recovery is needed.
Thu Apr  9 21:08:28 2020 - [info] Starting recovery on 172.16.2.132(172.16.2.132:3306)..
Thu Apr  9 21:08:28 2020 - [info]  This server has all relay logs. Waiting all logs to be applied..
Thu Apr  9 21:08:28 2020 - [info]   done.
Thu Apr  9 21:08:28 2020 - [info]  All relay logs were successfully applied.
Thu Apr  9 21:08:28 2020 - [info] Getting new master's binlog name and position..
Thu Apr  9 21:08:28 2020 - [info]  mariadb-bin.000002:477
Thu Apr  9 21:08:28 2020 - [info]  All other slaves should start replication from here. Statement should be: CHANGE MASTER TO MASTER_HOST='172.16.2.132', MASTER_PORT=3306, MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=477, MASTER_USER='repluser', MASTER_PASSWORD='xxx';
Thu Apr  9 21:08:28 2020 - [warning] master_ip_failover_script is not set. Skipping taking over new master IP address.
Thu Apr  9 21:08:28 2020 - [info] Setting read_only=0 on 172.16.2.132(172.16.2.132:3306)..
Thu Apr  9 21:08:28 2020 - [info]  ok.
Thu Apr  9 21:08:28 2020 - [info] ** Finished master recovery successfully.
Thu Apr  9 21:08:28 2020 - [info] * Phase 3: Master Recovery Phase completed.
Thu Apr  9 21:08:28 2020 - [info]
Thu Apr  9 21:08:28 2020 - [info] * Phase 4: Slaves Recovery Phase..
Thu Apr  9 21:08:28 2020 - [info]
Thu Apr  9 21:08:28 2020 - [info] * Phase 4.1: Starting Parallel Slave Diff Log Generation Phase..
Thu Apr  9 21:08:28 2020 - [info]
Thu Apr  9 21:08:28 2020 - [info] -- Slave diff file generation on host 172.16.2.137(172.16.2.137:3306) started, pid: 9240. Check tmp log /data/mastermha/app//172.16.2.137_3306_20200409210825.log if it takes time..
Thu Apr  9 21:08:29 2020 - [info]
Thu Apr  9 21:08:29 2020 - [info] Log messages from 172.16.2.137 ...
Thu Apr  9 21:08:29 2020 - [info]
Thu Apr  9 21:08:28 2020 - [info]  This server has all relay logs. No need to generate diff files from the latest slave.
Thu Apr  9 21:08:29 2020 - [info] End of log messages from 172.16.2.137.
Thu Apr  9 21:08:29 2020 - [info] -- 172.16.2.137(172.16.2.137:3306) has the latest relay log events.
Thu Apr  9 21:08:29 2020 - [info] Generating relay diff files from the latest slave succeeded.
Thu Apr  9 21:08:29 2020 - [info]
Thu Apr  9 21:08:29 2020 - [info] * Phase 4.2: Starting Parallel Slave Log Apply Phase..
Thu Apr  9 21:08:29 2020 - [info]
Thu Apr  9 21:08:29 2020 - [info] -- Slave recovery on host 172.16.2.137(172.16.2.137:3306) started, pid: 9242. Check tmp log /data/mastermha/app//172.16.2.137_3306_20200409210825.log if it takes time..
Thu Apr  9 21:08:30 2020 - [info]
Thu Apr  9 21:08:30 2020 - [info] Log messages from 172.16.2.137 ...
Thu Apr  9 21:08:30 2020 - [info]
Thu Apr  9 21:08:29 2020 - [info] Starting recovery on 172.16.2.137(172.16.2.137:3306)..
Thu Apr  9 21:08:29 2020 - [info]  This server has all relay logs. Waiting all logs to be applied..
Thu Apr  9 21:08:29 2020 - [info]   done.
Thu Apr  9 21:08:29 2020 - [info]  All relay logs were successfully applied.
Thu Apr  9 21:08:29 2020 - [info]  Resetting slave 172.16.2.137(172.16.2.137:3306) and starting replication from the new master 172.16.2.132(172.16.2.132:3306)..
Thu Apr  9 21:08:29 2020 - [info]  Executed CHANGE MASTER.
Thu Apr  9 21:08:29 2020 - [info]  Slave started.
Thu Apr  9 21:08:30 2020 - [info] End of log messages from 172.16.2.137.
Thu Apr  9 21:08:30 2020 - [info] -- Slave recovery on host 172.16.2.137(172.16.2.137:3306) succeeded.
Thu Apr  9 21:08:30 2020 - [info] All new slave servers recovered successfully.
Thu Apr  9 21:08:30 2020 - [info]
Thu Apr  9 21:08:30 2020 - [info] * Phase 5: New master cleanup phase..
Thu Apr  9 21:08:30 2020 - [info]
Thu Apr  9 21:08:30 2020 - [info] Resetting slave info on the new master..
Thu Apr  9 21:08:30 2020 - [info]  172.16.2.132: Resetting slave info succeeded.
Thu Apr  9 21:08:30 2020 - [info] Master failover to 172.16.2.132(172.16.2.132:3306) completed successfully.
Thu Apr  9 21:08:30 2020 - [info]

----- Failover Report -----

app: MySQL Master failover 172.16.2.131(172.16.2.131:3306) to 172.16.2.132(172.16.2.132:3306) succeeded
//切换成功
Master 172.16.2.131(172.16.2.131:3306) is down!  //主节点故障

Check MHA Manager logs at node4:/data/mastermha/app/manager.log for details.

Started automated(non-interactive) failover.
The latest slave 172.16.2.132(172.16.2.132:3306) has all relay logs for recovery.
Selected 172.16.2.132(172.16.2.132:3306) as a new master.
172.16.2.132(172.16.2.132:3306): OK: Applying all logs succeeded.
172.16.2.137(172.16.2.137:3306): This host has the latest relay log events.
Generating relay diff files from the latest slave succeeded.
172.16.2.137(172.16.2.137:3306): OK: Applying all logs succeeded. Slave started, replicating from 172.16.2.132(172.16.2.132:3306)
172.16.2.132(172.16.2.132:3306): Resetting slave info succeeded.
Master failover to 172.16.2.132(172.16.2.132:3306) completed successfully.

切换后查看新主服务器状态

MariaDB [(none)]> show variables like "read_only" //查看read_only已关闭
    -> ;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| read_only     | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

MariaDB [(none)]> show slave status\G  //slave状态已清除
Empty set (0.00 sec)

查看从服务器2状态

MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.16.2.132  //主服务器已变化
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mariadb-bin.000002
          Read_Master_Log_Pos: 477
               Relay_Log_File: mariadb-relay-bin.000002
                Relay_Log_Pos: 531
        Relay_Master_Log_File: mariadb-bin.000002
             Slave_IO_Running: Yes

相关文章

  • sql 练习(五)

    环境是mysql 练习数据见SQL:练习的前期准备 sql 练习(一)sql 练习(二)sql 练习(三)sql ...

  • sql 练习(四)

    环境是mysql 练习数据见SQL:练习的前期准备 sql 练习(一)sql 练习(二)sql 练习(三)31、查...

  • mysql练习二

    编写脚本,支持让用户自主选择,使用mysqldump还是xtraback全量备份。 Mysql主从同步 实验环境:...

  • sql 练习(三)

    环境是mysql 练习数据见SQL:练习的前期准备 sql 练习(一)sql 练习(二)21、查询成绩高于学号为“...

  • MySQL Operation

    sql语句练习sql练习2 MYSQL导入数据出现The MySQL server is running with...

  • MySQL 数据库SQL练习

    title: MySQL 数据库SQL练习tags: MySQL,练习grammar_cjkRuby: true ...

  • 2020 -7-23

    mysql 练习题1、mysql中的varchar 和 char 有什么区别?二者存储长度不同,char 是不可变...

  • mysql数据库小知识---MYSQL编程

    MYSQL编程 第一章 存储过程 【练习】 第二章 控制结构 1.条件控制 【练习】 2.循环控制 【练习】 第三...

  • 数据库语言杂记

    MySQL ORDER BY 排序 IF 及 IN 字符串连接函数concat() MySQL练习题:练习题一 ...

  • 2019-08-09

    今天练习使用MySQL

网友评论

      本文标题:mysql练习二

      本文链接:https://www.haomeiwen.com/subject/ydwkmhtx.html