学习第十二周

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

主从复制:

master 10.0.0.151

安装
yum -y install mysql-server
修改配置文件
vim /etc/my.cnf.d/mysql-server.cnf

重启服务
systemctl restart mysqld

查看日志

创建复制用户并授权
create user 'repluser'@'10.0.0.%' identified by '123456';
grant replication slave on *.* to 'repluser'@'10.0.0.%';
完全备份
mysqldump -uroot -p123456 -A -F --master-data=1 --single-transaction > /data/all.sql

slave 10.0.0.152

yum -y install mysql-server
vim /etc/my.cnf.d/mysql-server.cnf


拷贝master完全备份到本地
scp 10.0.0.151:/data/all.sql /data
systemctl restart mysqld

vim /data/all.sql

从节点还原备份
mysql>set sql_log_bin=0;
mysql>source /data/all.sql;
mysql>set sql_log_bin=1;

遇到报错: Variable ‘character_set_client’ can’t be set to the value of ‘NULL
找到all.sql的最后

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

删除

启动

成功

ok

主主复制

master1 10.0.0.151

vim /etc/my.cnf.d/mysql-server.cnf

image.png

systemctl restart mysqld

image.png
master2 10.0.0.152

vim /etc/my.cnf.d/mysql-server.cnf


systemctl restart mysqld

在master2实现主从

mysql> CHANGE MASTER TO
    -> MASTER_HOST='10.0.0.151',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='123456',
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='master1bin.000002',
    -> MASTER_LOG_POS=1080;
mysql> start slave;
image.png

在master1实现主从

mysql> CHANGE MASTER TO
    -> MASTER_HOST='10.0.0.152',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='123456',
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='master2bin.000002',
    -> MASTER_LOG_POS=1080;
mysql> start slave;
image.png

成功



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

安装xtrabackup

[root@centos8 ~]# yum -y install percona-xtrabackup-80-8.0.26-18.1.el8.x86_64.rpm
创建备份文件夹
[root@centos8 ~]# mkdir /data/bak

原文件
第一次全备

[root@centos8 ~]# xtrabackup -uroot -p123456 --backup --target-dir=/data/bak/full

第一次修改数据

mysql> insert teachers(name,age,gender) values('test1',20,'M');

image.png
第一次增量备份

[root@centos8 ~]# xtrabackup -uroot -p123456 --backup --target-dir=/data/bak/inc1 --incremental-basedir=/data/bak/full

image.png
第二次修改数据

mysql> insert teachers(name,age,gender) values('test2',21,'F');

image.png
第二次增量备份

[root@centos8 ~]# xtrabackup -uroot -p123456 --backup --target-dir=/data/bak/inc2 --incremental-basedir=/data/bak/inc1

image.png
拷贝到远程主机

[root@centos8 ~]# scp -r /data/bak/* 10.0.0.152:/data/bak

预准备完全备份

[root@centos8 bak]# xtrabackup --prepare --apply-log-only --target-dir=/data/bak/full

合并第一次增量

[root@centos8 bak]# xtrabackup --prepare --apply-log-only --target-dir=/data/bak/full --incremental-dir=/data/bak/inc1

合并第二次增量,不加--apply-log-only(此选项用于阻止回滚未完成的事务)

[root@centos8 bak]# xtrabackup --prepare --target-dir=/data/bak/full --incremental-dir=/data/bak/inc2

还原,数据库目录必须为空,MySQL服务不能启动

[root@centos8 bak]# xtrabackup --copy-back --target-dir=/data/bak/full

修改属性

[root@centos8 bak]# chown -R mysql:mysql /var/lib/mysql

启动数据库

[root@centos8 bak]# systemctl start mysqld

成功
成功

3、MyCAT实现MySQL读写分离

服务器三台
  • master:10.0.0.151
  • slave:10.0.0.152
  • mycat:10.0.0.155

搭建主从(过程略)

mycat服务器上
安装java
[root@centos8 ~]# yum -y install java
下载mycat 并解压
[root@centos8 ~]# wget http://dl.mycat.org.cn/1.6.7.6/20220119212903/Mycat-server-1.6.7.6-release-20220119212903-linux.tar.gz
[root@centos8 ~]# tar -xvf Mycat-server-1.6.7.6-release-20220119212903-linux.tar.gz -C /app/
环境变量
[root@centos8 ~]# echo 'PATH=/app/mycat/bin:$PATH' > /etc/profile.d/mycat.sh
启动mycat

启动mycat

成功

image.png

修改server.xml

修改schema.xml


启动mycat

mycat本地连接


image.png

在服务器开启general_log可以看到记录


image.png

停止152的数据库服务器,不影响使用


image.png

4、ansible常用模块介绍

command

默认模块,在远程主机执行命令,无法支持"<",">","|",";","&"等符号

参数 作用 示例
chdir 在执行命令前,进入到指定XXX目录中 ansible localhost -m command -a "chdir=/data ls -l"
creates 判断指定文件是否存在,如果存在,不执行后面的操作 ansible localhost -m command -a "touch /data/lol.txt creates=/data/lol.txt"
removes 判断指定文件是否存在,如果存在,执行后面的操作 ansible localhost -m command -a "rm -f /data/hosts removes=/data/hosts"

shell

类似command模块,使用方法相同,支持"<",">","|",";","&"等符号

yum/apt

软件包管理器安装,升级,降级,删除和列出软件包和组

参数 作用 示例
name 必填项,软件名称
state 将软件进行卸载 state=absent/removed
state 安装 ansible web01 -m yum -a "name=httpd-tools state=present"
state 安装最新的软件 state=latest

service

管理服务运行状态

参数 作用 示例
enabled 设置服务是否开机自启动 enabled=yes/enabled=no
name 必填项,设置要启动/停止服务名称 ansible web01 -m service -a "name=crond state=started enabled=yes"
state 平滑重启 state=reloaded
重启 state=restarted
启动 state=started
停止 state=stopped

mount

用于管理主机进行挂载卸载操作

参数 作用 示例
fstype 指定挂载的文件系统类型 ansible web01 -m mount -a "src=10.0.0.1:/data/ path=/mnt fstype=nfs state=mounted"
path 挂载点信息
src 设备文件信息
state 会进行卸载,也会修改fstab文件信息 state=absent
不会挂载,只会修改fstab文件 state=present
会进行卸载,不会修改fstab文件 state=unmounted
会进行挂载,会修改fstab文件 state=mounted

cron

定时任务模块

参数 作用 示例
minute/hour/day/month/weekday 设置时间信息相关参数 ansible 10.0.0.8 -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_backup.sh'
job 设置定时任务相关参数 ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate ntp.aliyun.com &>/dev/null' name=Synctime"
name 必填项,定时任务名称
state =absent, 删除指定定时任务 ansible websrvs -m cron -a 'state=absent name=Synctime'
disabled =no启用/=yes禁用计划任务 ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.20.0.1 &>/dev/null' name=Synctime disabled=no

copy

从ansible服务器主控端复制文件到远程主机

参数 作用 示例
src=XXX 源文件路径,如果没指明路径,则为当前目录或当前目录下的XXX文件 ansible web01 -m copy -a "src=./anaconda-ks.cfg dest=/data"
backup=yes/no 默认数据复制到远程主机,会覆盖原有文件(yes 将源文件进行备份 ansible web01 -m copy -a "src=./anaconda-ks.cfg dest=/data backup=yes"
content 在文件中添加信息 ansible web01 -m copy -a "content=test dest=/data/anaconda-ks.cfg "
dest 将数据复制到远程节点的路径信息,必填项
owner 文件数据复制到远程主机,设置文件属主用户信息 ansible web01 -m copy -a "src=./anaconda-ks.cfg dest=/data owner=mysql group=test mode=644 "
group 文件数据复制到远程主机,设置文件属组用户信息
mode 文件数据复制到远程主机,设置数据的权限

get_url

用于将文件从http、https或ftp下载到被管理机节点上

参数 作用 示例
url 下载文件的URL,支持HTTP,HTTPS或FTP协议 ansible host1 -m get_url -a 'url= http://host2/a.sh dest=/tmp'
dest 下载到目标路径(绝对路径),如果目标是一个目录,就用服务器上面文件的名称,如果目标设置了名称就用目标设置的名称
owner 指定属主
group 指定属组
mode 指定权限
force 如果yes,dest不是目录,将每次下载文件,如果内容改变,替换文件。如果否,则只有在目标不存在时才会下载该文件
checksum 对目标文件在下载后计算摘要,以确保其完整性 ansible ... -m get_url ... checksum="sha256:D98291AC[...]B6DC7B97"

file

设置文件属性,创建软链接等

参数 作用 示例
dest/path/name 必填项,将数据复制到远程节点的路径信息 ansible all -m file -a 'path=/data/test.txt state=touch'
group 文件数据复制到远程主机,设置文件属组用户信息 ansible all -m file -a "path=/data/mysql state=directory owner=mysql group=mysql"
mode 文件数据复制到远程主机,设置数据的权限 ansible all -m file -a "path=/root/test.sh owner=test mode=755"
owner 文件数据复制到远程主机,设置文件属主用户信息
src 指定将本地管理主机的什么数据信息进行远程复制 ansible all -m file -a 'src=/data/testfile name=/data/testfile-link state=link'
state=absent 将数据进行删除 ansible all -m file -a 'path=/data/test.txt state=absent'
state=directory 创建一个空目录信息
state=file 查看指定目录信息是否存在
state=touch 创建一个空文件
state=link 创建链接文件

setup

收集远程主机的facts

参数 作用 示例
filter 可通过filter参数对输出信息进行过滤 ansible all -m setup -a "filter=ansible_all_ipv4_addresses"

debug

调试模块,用于在调试中输出信息

参数 作用 示例
msg 调试输出的消息
var 将某个任务执行的输出作为变量传递给debug模块,debug会直接将其打印输出
verbosity debug的级别(默认是0级,全部显示)

lineinfile

修改某个文件的单行文件

参数 作用 示例
path/dest 必填项,指定要操作的文件 ansible websrvs -m lineinfile -a "path=/etc/httpd/conf/httpd.conf regexp='^Listen' line='Listen 80'"
line 指定文本内容
regexp 使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除
state =absent表示删除 ansible all -m lineinfile -a 'dest=/etc/fstab state=absent regexp="^#"'

User

创建删除修改用户

参数 作用 示例
name 用于指定操作的 user,必须项 ansible note1 -m user -a "name=test"
uid 用于指定 user 的 UID,默认为空
group 指定用户主组。默认值为空,为空时创建的用户组名跟用户名一致
groups 用于指定用户属组
append 跟groups参数一起使用管理用户属组,默认为false,如果 append='yes' ,则从groups参数中增加用户的属组;如果 append='no' ,则用户属组只设置为groups中的组,移除其他所有属组
state 可选值有 present、absent,指定用户是否存在于远程主机中 ansible note1 -m user -a "name=test state=absent"
home 指定用户home目录路径
shell 指定用户默认shell
system 指定用户是否是系统用户
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容