1泵额、主從復(fù)制及主主復(fù)制的實(shí)現(xiàn)
主從復(fù)制:
master 10.0.0.151
安裝
yum -y install mysql-server
修改配置文件
vim /etc/my.cnf.d/mysql-server.cnf
重啟服務(wù)
systemctl restart mysqld
創(chuàng)建復(fù)制用戶并授權(quán)
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
從節(jié)點(diǎn)還原備份
mysql>set sql_log_bin=0;
mysql>source /data/all.sql;
mysql>set sql_log_bin=1;
遇到報(bào)錯(cuò): 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 */;
刪除
成功
主主復(fù)制
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實(shí)現(xiàn)主從
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實(shí)現(xiàn)主從
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實(shí)現(xiàn)全量+增量+binlog恢復(fù)庫
安裝xtrabackup
[root@centos8 ~]# yum -y install percona-xtrabackup-80-8.0.26-18.1.el8.x86_64.rpm
創(chuàng)建備份文件夾
[root@centos8 ~]# mkdir /data/bak
第一次全備
[root@centos8 ~]# xtrabackup -uroot -p123456 --backup --target-dir=/data/bak/full
第一次修改數(shù)據(jù)
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
第二次修改數(shù)據(jù)
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
拷貝到遠(yuǎn)程主機(jī)
[root@centos8 ~]# scp -r /data/bak/* 10.0.0.152:/data/bak
預(yù)準(zhǔn)備完全備份
[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(此選項(xiàng)用于阻止回滾未完成的事務(wù))
[root@centos8 bak]# xtrabackup --prepare --target-dir=/data/bak/full --incremental-dir=/data/bak/inc2
還原,數(shù)據(jù)庫目錄必須為空巩梢,MySQL服務(wù)不能啟動(dòng)
[root@centos8 bak]# xtrabackup --copy-back --target-dir=/data/bak/full
修改屬性
[root@centos8 bak]# chown -R mysql:mysql /var/lib/mysql
啟動(dòng)數(shù)據(jù)庫
[root@centos8 bak]# systemctl start mysqld
成功
3创泄、MyCAT實(shí)現(xiàn)MySQL讀寫分離
服務(wù)器三臺(tái)
- master:10.0.0.151
- slave:10.0.0.152
- mycat:10.0.0.155
搭建主從(過程略)
mycat服務(wù)器上
安裝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/
環(huán)境變量
[root@centos8 ~]# echo 'PATH=/app/mycat/bin:$PATH' > /etc/profile.d/mycat.sh
啟動(dòng)mycat
成功
修改server.xml
修改schema.xml
啟動(dòng)mycat
mycat本地連接
在服務(wù)器開啟general_log可以看到記錄
停止152的數(shù)據(jù)庫服務(wù)器艺玲,不影響使用
4、ansible常用模塊介紹
command
默認(rèn)模塊鞠抑,在遠(yuǎn)程主機(jī)執(zhí)行命令饭聚,無法支持"<",">"搁拙,"|"秒梳,";","&"等符號(hào)
參數(shù) | 作用 | 示例 |
---|---|---|
chdir | 在執(zhí)行命令前箕速,進(jìn)入到指定XXX目錄中 | ansible localhost -m command -a "chdir=/data ls -l" |
creates | 判斷指定文件是否存在酪碘,如果存在,不執(zhí)行后面的操作 | ansible localhost -m command -a "touch /data/lol.txt creates=/data/lol.txt" |
removes | 判斷指定文件是否存在盐茎,如果存在兴垦,執(zhí)行后面的操作 | ansible localhost -m command -a "rm -f /data/hosts removes=/data/hosts" |
shell
類似command模塊,使用方法相同,支持"<"庭呜,">","|",";","&"等符號(hào)
yum/apt
軟件包管理器安裝恋沃,升級(jí)缝彬,降級(jí),刪除和列出軟件包和組
參數(shù) | 作用 | 示例 |
---|---|---|
name | 必填項(xiàng)非洲,軟件名稱 | |
state | 將軟件進(jìn)行卸載 | state=absent/removed |
state | 安裝 | ansible web01 -m yum -a "name=httpd-tools state=present" |
state | 安裝最新的軟件 | state=latest |
service
管理服務(wù)運(yùn)行狀態(tài)
參數(shù) | 作用 | 示例 |
---|---|---|
enabled | 設(shè)置服務(wù)是否開機(jī)自啟動(dòng) | enabled=yes/enabled=no |
name | 必填項(xiàng),設(shè)置要啟動(dòng)/停止服務(wù)名稱 | ansible web01 -m service -a "name=crond state=started enabled=yes" |
state | 平滑重啟 | state=reloaded |
重啟 | state=restarted |
|
啟動(dòng) | state=started |
|
停止 | state=stopped |
mount
用于管理主機(jī)進(jìn)行掛載卸載操作
參數(shù) | 作用 | 示例 |
---|---|---|
fstype | 指定掛載的文件系統(tǒng)類型 | ansible web01 -m mount -a "src=10.0.0.1:/data/ path=/mnt fstype=nfs state=mounted" |
path | 掛載點(diǎn)信息 | 略 |
src | 設(shè)備文件信息 | 略 |
state | 會(huì)進(jìn)行卸載,也會(huì)修改fstab文件信息 | state=absent |
不會(huì)掛載拐纱,只會(huì)修改fstab文件 | state=present |
|
會(huì)進(jìn)行卸載,不會(huì)修改fstab文件 | state=unmounted |
|
會(huì)進(jìn)行掛載哥倔,會(huì)修改fstab文件 | state=mounted |
cron
定時(shí)任務(wù)模塊
參數(shù) | 作用 | 示例 |
---|---|---|
minute/hour/day/month/weekday | 設(shè)置時(shí)間信息相關(guān)參數(shù) | ansible 10.0.0.8 -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_backup.sh' |
job | 設(shè)置定時(shí)任務(wù)相關(guān)參數(shù) | ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate ntp.aliyun.com &>/dev/null' name=Synctime" |
name | 必填項(xiàng)秸架,定時(shí)任務(wù)名稱 | 略 |
state | =absent, 刪除指定定時(shí)任務(wù) | ansible websrvs -m cron -a 'state=absent name=Synctime' |
disabled | =no啟用/=yes禁用計(jì)劃任務(wù) | ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.20.0.1 &>/dev/null' name=Synctime disabled=no |
copy
從ansible服務(wù)器主控端復(fù)制文件到遠(yuǎn)程主機(jī)
參數(shù) | 作用 | 示例 |
---|---|---|
src=XXX | 源文件路徑咆蒿,如果沒指明路徑,則為當(dāng)前目錄或當(dāng)前目錄下的XXX文件 | ansible web01 -m copy -a "src=./anaconda-ks.cfg dest=/data" |
backup=yes/no | 默認(rèn)數(shù)據(jù)復(fù)制到遠(yuǎn)程主機(jī)东抹,會(huì)覆蓋原有文件(yes 將源文件進(jìn)行備份 | 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 | 將數(shù)據(jù)復(fù)制到遠(yuǎn)程節(jié)點(diǎn)的路徑信息,必填項(xiàng) | 略 |
owner | 文件數(shù)據(jù)復(fù)制到遠(yuǎn)程主機(jī)沃测,設(shè)置文件屬主用戶信息 | ansible web01 -m copy -a "src=./anaconda-ks.cfg dest=/data owner=mysql group=test mode=644 " |
group | 文件數(shù)據(jù)復(fù)制到遠(yuǎn)程主機(jī)缭黔,設(shè)置文件屬組用戶信息 | 略 |
mode | 文件數(shù)據(jù)復(fù)制到遠(yuǎn)程主機(jī),設(shè)置數(shù)據(jù)的權(quán)限 | 略 |
get_url
用于將文件從http蒂破、https或ftp下載到被管理機(jī)節(jié)點(diǎn)上
參數(shù) | 作用 | 示例 |
---|---|---|
url | 下載文件的URL,支持HTTP馏谨,HTTPS或FTP協(xié)議 | ansible host1 -m get_url -a 'url= http://host2/a.sh dest=/tmp' |
dest | 下載到目標(biāo)路徑(絕對(duì)路徑),如果目標(biāo)是一個(gè)目錄附迷,就用服務(wù)器上面文件的名稱惧互,如果目標(biāo)設(shè)置了名稱就用目標(biāo)設(shè)置的名稱 | 略 |
owner | 指定屬主 | 略 |
group | 指定屬組 | 略 |
mode | 指定權(quán)限 | 略 |
force | 如果yes哎媚,dest不是目錄,將每次下載文件壹哺,如果內(nèi)容改變抄伍,替換文件。如果否管宵,則只有在目標(biāo)不存在時(shí)才會(huì)下載該文件 | 略 |
checksum | 對(duì)目標(biāo)文件在下載后計(jì)算摘要截珍,以確保其完整性 | ansible ... -m get_url ... checksum="sha256:D98291AC[...]B6DC7B97" |
file
設(shè)置文件屬性,創(chuàng)建軟鏈接等
參數(shù) | 作用 | 示例 |
---|---|---|
dest/path/name | 必填項(xiàng),將數(shù)據(jù)復(fù)制到遠(yuǎn)程節(jié)點(diǎn)的路徑信息 | ansible all -m file -a 'path=/data/test.txt state=touch' |
group | 文件數(shù)據(jù)復(fù)制到遠(yuǎn)程主機(jī)箩朴,設(shè)置文件屬組用戶信息 | ansible all -m file -a "path=/data/mysql state=directory owner=mysql group=mysql" |
mode | 文件數(shù)據(jù)復(fù)制到遠(yuǎn)程主機(jī)岗喉,設(shè)置數(shù)據(jù)的權(quán)限 | ansible all -m file -a "path=/root/test.sh owner=test mode=755" |
owner | 文件數(shù)據(jù)復(fù)制到遠(yuǎn)程主機(jī),設(shè)置文件屬主用戶信息 | 略 |
src | 指定將本地管理主機(jī)的什么數(shù)據(jù)信息進(jìn)行遠(yuǎn)程復(fù)制 | ansible all -m file -a 'src=/data/testfile name=/data/testfile-link state=link' |
state=absent | 將數(shù)據(jù)進(jìn)行刪除 | ansible all -m file -a 'path=/data/test.txt state=absent' |
state=directory | 創(chuàng)建一個(gè)空目錄信息 | 略 |
state=file | 查看指定目錄信息是否存在 | 略 |
state=touch | 創(chuàng)建一個(gè)空文件 | 略 |
state=link | 創(chuàng)建鏈接文件 | 略 |
setup
收集遠(yuǎn)程主機(jī)的facts
參數(shù) | 作用 | 示例 |
---|---|---|
filter | 可通過filter參數(shù)對(duì)輸出信息進(jìn)行過濾 | ansible all -m setup -a "filter=ansible_all_ipv4_addresses" |
debug
調(diào)試模塊炸庞,用于在調(diào)試中輸出信息
參數(shù) | 作用 | 示例 |
---|---|---|
msg | 調(diào)試輸出的消息 | |
var | 將某個(gè)任務(wù)執(zhí)行的輸出作為變量傳遞給debug模塊钱床,debug會(huì)直接將其打印輸出 | |
verbosity | debug的級(jí)別(默認(rèn)是0級(jí),全部顯示) |
lineinfile
修改某個(gè)文件的單行文件
參數(shù) | 作用 | 示例 |
---|---|---|
path/dest | 必填項(xiàng)埠居,指定要操作的文件 | ansible websrvs -m lineinfile -a "path=/etc/httpd/conf/httpd.conf regexp='^Listen' line='Listen 80'" |
line | 指定文本內(nèi)容 | |
regexp | 使用正則表達(dá)式匹配對(duì)應(yīng)的行查牌,當(dāng)替換文本時(shí),如果有多行文本都能被匹配滥壕,則只有最后面被匹配到的那行文本才會(huì)被替換纸颜,當(dāng)刪除文本時(shí),如果有多行文本都能被匹配绎橘,這么這些行都會(huì)被刪除 | |
state | =absent表示刪除 | ansible all -m lineinfile -a 'dest=/etc/fstab state=absent regexp="^#"' |
User
創(chuàng)建刪除修改用戶
參數(shù) | 作用 | 示例 |
---|---|---|
name | 用于指定操作的 user胁孙,必須項(xiàng) | ansible note1 -m user -a "name=test" |
uid | 用于指定 user 的 UID,默認(rèn)為空 | |
group | 指定用戶主組称鳞。默認(rèn)值為空涮较,為空時(shí)創(chuàng)建的用戶組名跟用戶名一致 | |
groups | 用于指定用戶屬組 | |
append | 跟groups參數(shù)一起使用管理用戶屬組,默認(rèn)為false冈止,如果 append='yes' 狂票,則從groups參數(shù)中增加用戶的屬組;如果 append='no' 熙暴,則用戶屬組只設(shè)置為groups中的組苫亦,移除其他所有屬組 | |
state | 可選值有 present、absent怨咪,指定用戶是否存在于遠(yuǎn)程主機(jī)中 | ansible note1 -m user -a "name=test state=absent" |
home | 指定用戶home目錄路徑 | |
shell | 指定用戶默認(rèn)shell | |
system | 指定用戶是否是系統(tǒng)用戶 |