学习第十二周

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 指定用户是否是系统用户
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容