MySql教程

Mysql数据库、ANSIBLE运维自动化

本文主要是介绍Mysql数据库、ANSIBLE运维自动化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、主从复制及主主复制的实现

一、主节点
1.1修改master主节点的配置
[root@master ~]#vim /etc/my.cnf
[mysqld]
server_id=7
binlog_format=row
log-bin=/data/logbin/mysql-bin

1.2 建立二进制文件存放目录,修改所有者和所属组
[root@master ~]#mkdir /data/logbin/ -p
[root@master ~]#chown -R mysql.mysql /data/logbin/

1.3 重启数据库服务
[root@master ~]#systemctl restart mysqld

1.4 数据库完全备份
[root@master ~]#mysqldump -A -F -uroot -pMySQL@2022. --master-data=1 --single-transaction > /data/all.sql

1.5 创建复制用户并授权
MariaDB [mysql]> grant replication slave on . to repluser@'10.0.0.%' identified by '123456';

1.6 将备份复制到从节点
[root@master ~]#scp /data/all.sql 10.0.0.17:/data

二、从节点
2.1 修改slave从节点的配置
[root@slave ~]#vim /etc/my.cnf
[mysqld]
server_id=17
binlog_format=row
read_only=on
log-bin=/data/logbin/mysql-bin

2.2 建立二进制文件存放目录,修改所有者和所属组
[root@slave ~]#mkdir /data/logbin/ -p
[root@slave ~]#chown -R mysql.mysql /data/logbin/

2.3 重启数据库服务
[root@slave ~]#systemctl restart mysqld

2.4 从节点修改备份文件
[root@slave ~]#vim /data/all.sql
CHANGE MASTER TO
MASTER_HOST='10.0.0.7',
MASTER_USER='repluser',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=328;

2.5关闭二进制日志
MariaDB [mysql]> set sql_log_bin=off;

2.6 导入备份数据
MariaDB [mysql]> source /data/all.sql

2.7查看从节点备份状态
MariaDB [mysql]> show slave status\G

2.8开启从节点slave进程,从节点开始复制
MariaDB [mysql]> start slave;

2.9 再次查看从节点备份状态
MariaDB [mysql]> show slave status\G

3.0 查看从节点的账号信息及数据库
MariaDB [mysql]> select user,host from mysql.user;
+-------------+-----------+
| User | Host |
+-------------+-----------+
| repluser | 10.0.0.% |
| mariadb.sys | localhost |
| mysql | localhost |
| root | localhost |
+-------------+-----------+
MariaDB [mysql]> show databases;
+--------------------+
| Database |
+--------------------+
| hellodb |
| information_schema |
| mysql |
| performance_schema |
+--------------------+

3.1从节点开启二进制日志
MariaDB [mysql]> set sql_log_bin=on;

MySQL主主复制的实现
环境准备:MySQL主主复制架构环境
master1 CentOS7.9-10.0.0.7 MariaDB-10.4.22
master2 CentOS7.9-10.0.0.17 MariaDB-10.4.22
一、master1节点
1.1修改master1的配置
[root@master1 ~]#cat /etc/my.cnf
[mysqld]
server_id=7
binlog_format=row
log-bin=/data/logbin/mysql-bin

1.2 建立二进制文件存放目录,修改所有者和所属组
[root@master1 ~]#mkdir /data/logbin/ -p
[root@master1 ~]#chown -R mysql.mysql /data/logbin/

1.3 重启数据库服务
[root@master1 ~]#systemctl restart mysqld

1.4 查看二进制位置
MariaDB [mysql]> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 328 |
+------------------+-----------+

1.5 创建复制用户并授权
MariaDB [mysql]> grant replication slave on . to repluser@'10.0.0.%' identified by '123456';
MariaDB [mysql]> FLUSH PRIVILEGES;

1.6 完成备份后再次查看二进制位置
MariaDB [mysql]> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 656 |
+------------------+-----------+

1.7 确定同步master2的数据
MariaDB [mysql]> CHANGE MASTER TO
-> MASTER_HOST='10.0.0.17',
-> MASTER_USER='repluser',
-> MASTER_PASSWORD='123456',
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=328;

1.8 开启master1进程,开始复制
MariaDB [mysql]> start slave;

1.9 查看master1备份状态
MariaDB [mysql]> show slave status\G

2.0 创建数据库db1
MariaDB [mysql]> create database db1;

2.1 查看master2 创建的db2数据
MariaDB [mysql]> show databases;
+--------------------+
| Database |
+--------------------+
| db1 |
| db2 |
| information_schema |
| mysql |
| performance_schema |
+--------------------+

二、master2节点
2.1 修改master2的配置
[root@master2 ~]#cat /etc/my.cnf
[mysqld]
server_id=17
binlog_format=row
log-bin=/data/logbin/mysql-bin

2.2 建立二进制文件存放目录,修改所有者和所属组
[root@master2 ~]#mkdir /data/logbin/ -p
[root@master2 ~]#chown -R mysql.mysql /data/logbin/

2.3 重启数据库服务
[root@master2 ~]#systemctl restart mysqld

2.4 查看二进制位置
MariaDB [mysql]> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 328 |
+------------------+-----------+

2.5 确定同步master1的数据
MariaDB [mysql]> CHANGE MASTER TO
-> MASTER_HOST='10.0.0.7',
-> MASTER_USER='repluser',
-> MASTER_PASSWORD='123456',
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=328;

2.6查看master2备份状态
MariaDB [mysql]> show slave status\G

2.7开启master2进程,开始复制
MariaDB [mysql]> start slave;

2.8 再次查看master2备份状态
MariaDB [mysql]> show slave status\G

2.9再次查看二进制位置
MariaDB [mysql]> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 328 |
+------------------+-----------+

3.0 查看master2的账号信息
MariaDB [mysql]> select user,host from mysql.user;
+-------------+-----------+
| User | Host |
+-------------+-----------+
| repluser | 10.0.0.% |
| mariadb.sys | localhost |
| mysql | localhost |
| root | localhost |
+-------------+-----------+

3.1 查看master1 创建的db1数据
MariaDB [mysql]> show databases;
+--------------------+
| Database |
+--------------------+
| db1 |
| information_schema |
| mysql |
| performance_schema |
+--------------------+

3.2 创建db2数据库
MariaDB [mysql]> create database db2;

2、xtrabackup实现全量+增量+binlog恢复库

  • 安装软件

[root@localhost ~]# yum install -y percona-xtrabackup-24-2.4.20-1.el8.x86_64.rpm

  • 进行备份操作

[root@localhost ~]# xtrabackup -uroot --backup --target-dir=/backup/
[root@localhost ~]# ll /backup/
total 18456
-rw-r----- 1 root root 431 Apr 17 23:18 backup-my.cnf
-rw-r----- 1 root root 18874368 Apr 17 23:18 ibdata1
drwxr-x--- 2 root root 4096 Apr 17 23:18 mysql
drwxr-x--- 2 root root 4096 Apr 17 23:18 performance_schema
drwxr-x--- 2 root root 122 Apr 17 23:18 test
-rw-r----- 1 root root 135 Apr 17 23:18 xtrabackup_checkpoints
-rw-r----- 1 root root 427 Apr 17 23:18 xtrabackup_info
-rw-r----- 1 root root 2560 Apr 17 23:18 xtrabackup_logfile
[root@localhost ~]# scp -r /backup/* 172.16.66.71:/backup/ #拷贝至远程服务器进行存放
恢复测试

  • 将远程服务器文件拷贝至需恢复数据库的服务器
    [root@localhost ~]# mkdir /backup
    [root@localhost ~]# scp -r /backup/* 172.16.66.71:/backup/
    [root@localhost ~]# xtrabackup --prepare --target-dir=/backup/
    [root@localhost ~]# xtrabackup --copy-back --target-dir=/backup/
    [root@localhost ~]# chown -R mysql:mysql /var/lib/mysql

  • 恢复成功
    MariaDB [(none)]> show databases;
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | mysql |
    | performance_schema |
    | test |
    +--------------------+
    4 rows in set (0.00 sec)

  • 增量备份

[root@localhost ~]# xtrabackup -uroot --backup --target-dir=/backup/base
MariaDB [(none)]> CREATE DATABASE PTG123;
Query OK, 1 row affected (0.00 sec)
[root@localhost ~]# xtrabackup -uroot --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base

  • 增量备份恢复

[root@centos8 ~]#xtrabackup --prepare --apply-log-only --target-dir=/backup/base
[root@centos8 ~]#xtrabackup --prepare --target-dir=/backup/base --incremental-dir=/backup/inc1
[root@localhost ~]# xtrabackup --copy-back --target-dir=/backup/base
[root@localhost ~]# chown -R mysql:mysql /var/lib/mysql
[root@localhost ~]# systemctl start mariadb

3、MyCAT实现MySQL读写分离

  • 安装mycat

[root@centos8 ~]# yum -y install java mariadb

[root@centos8 ~]# java -version

[root@centos8 ~]# wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz

[root@centos8 ~]# mkdir /apps

[root@centos8 ~]# tar xf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /apps

[root@centos8 ~]# echo 'PATH=/apps/mycat/bin:$PATH' > /etc/profile.d/mycat.sh

[root@centos8 ~]# . /etc/profile.d/mycat.sh

[root@centos8 ~]# mycat start

  • 配置mycat

[root@centos8 ~]# vim /apps/mycat/conf/server.xml
user name="root" #连接Mycat的用户名
property name="password">123456</property #连接Mycat的密码
property name="schemas">TESTDB</property #数据库名要和schema.xml相对应

[root@centos8 ~]# vim /apps/mycat/conf/schema.xml

[root@centos8 ~]# mycat restart

  • 在后端主服务器创建用户并对mycat授权

[root@centos8 ~]#mysql -uroot -p
mysql> create database mycat;
mysql> GRANT ALL ON . TO 'root'@'172.16.0.%' IDENTIFIED BY '123456' ;
mysql> flush privileges;

  • 在Mycat服务器上连接并测试

[root@centos8 ~]#mysql -uroot -p123456 -h127.0.0.1 -P8066
mysql> use TESTDB;
mysql> create table t1(id int);
MySQL> select @@server_id;
MySQL> select @@hostname;

4、ansible常用模块介绍

  • ping 模块

检查指定节点机器是否能连通,用法很简单,不涉及参数。如果被检测的主机在线,则返回pong

[root@localhost ~]# ansible 192.168.137.102 -m ping
192.168.137.102 | SUCCESS => {
"changed": false,
"ping": "pong"
}

  • setup模块

setup模块用于收集远程主机的一些基本信息。

常用参数:
filter :用于进行条件过滤。如果设置,仅返回匹配过滤条件的信息。

[root@localhost ~]# ansible 192.168.137.102 -m setup
不加选项会返回所有的信息。信息太多了 这里就不贴出来了。

获取ip地址
[root@localhost ~]# ansible 192.168.137.102 -m setup -a "filter=ansible_all_ipv4_addresses"
192.168.137.102 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"192.168.137.102"
]
},
"changed": false
}

获取是什么系统
[root@localhost ~]# ansible 192.168.137.102 -m setup -a "filter=ansible_distribution"
192.168.137.102 | SUCCESS => {
"ansible_facts": {
"ansible_distribution": "CentOS"
},
"changed": false
}

其他常用的信息。
ansible_all_ipv4_addresses:仅显示ipv4的信息。
ansible_devices:仅显示磁盘设备信息。
ansible_distribution:显示是什么系统,例:centos,suse等。
ansible_distribution_major_version:显示是系统主版本。
ansible_distribution_version:仅显示系统版本。
ansible_machine:显示系统类型,例:32位,还是64位。
ansible_eth0:仅显示eth0的信息。
ansible_hostname:仅显示主机名。
ansible_kernel:仅显示内核版本。
ansible_lvm:显示lvm相关信息。
ansible_memtotal_mb:显示系统总内存。
ansible_memfree_mb:显示可用系统内存。
ansible_memory_mb:详细显示内存情况。
ansible_swaptotal_mb:显示总的swap内存。
ansible_swapfree_mb:显示swap内存的可用内存。
ansible_mounts:显示系统磁盘挂载情况。
ansible_processor:显示cpu个数(具体显示每个cpu的型号)。
ansible_processor_vcpus:显示cpu个数(只显示总的个数)。

  • command 模块

command 模块可以帮助我们在远程主机上执行命令,使用的时候可以不用 加 -m 指定。command 是ansible 默认使用的模块。 (可以在配置文件中修改默认模块)

default module name for /usr/bin/ansible
module_name = command
注意:使用command在远程主机执行命令的时候,不会经过shell处理。如果命令带有重定向,管道符等会失效。

[root@localhost ~]# ansible 192.168.137.102 -a 'uptime'
192.168.137.102 | SUCCESS | rc=0 >>
15:44:41 up 1:33, 2 users, load average: 0.00, 0.01, 0.05

[root@localhost ~]# ansible 192.168.137.102 -a 'ls /root/'
192.168.137.102 | SUCCESS | rc=0 >>
anaconda-ks.cfg

  • shell 模块

shell 模块可以帮助我们在远程主机上执行命令。与 command 模块不同的是,shell 模块在远程主机中执行命令时,会经过远程主机上的 /bin/sh 程序处理。与command模块使用方法类似,只不过支持管道,重定向,变量符等等。由于command比较安全有可预知性,所以我们平时用的时候最好用command。command无法满足需求时,在使用shell。

[root@localhost ~]# ansible 192.168.137.102 -m shell -a 'netstat -lnpt|grep 3306'
192.168.137.102 | SUCCESS | rc=0 >>
tcp6 0 0 :::3306 ::

这篇关于Mysql数据库、ANSIBLE运维自动化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!