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 */;
删除
成功
主主复制
master1 10.0.0.151
vim /etc/my.cnf.d/mysql-server.cnf
systemctl restart mysqld
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;
在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;
成功
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');
第一次增量备份
[root@centos8 ~]# xtrabackup -uroot -p123456 --backup --target-dir=/data/bak/inc1 --incremental-basedir=/data/bak/full
第二次修改数据
mysql> insert teachers(name,age,gender) values('test2',21,'F');
第二次增量备份
[root@centos8 ~]# xtrabackup -uroot -p123456 --backup --target-dir=/data/bak/inc2 --incremental-basedir=/data/bak/inc1
拷贝到远程主机
[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
成功
修改server.xml
修改schema.xml
启动mycat
mycat本地连接
在服务器开启general_log可以看到记录
停止152的数据库服务器,不影响使用
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 | 指定用户是否是系统用户 |