第十二周作业:
1、主从复制及主主复制的实现
###主从复制###
#主节点配置 1.安装mysql [root@centos8-hkping ~]#yum -y install mysql-server 2.立即并且开机启动mysqld [root@centos8-hkping ~]#systemctl enable --now mysqld [root@centos8-hkping ~]#mysql mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec) 3.检查开启二进制日志 mysql> select @@log_bin; +-----------+ | @@log_bin | +-----------+ | 1 | +-----------+ 1 row in set (0.00 sec) 4.设置全局唯一的id号并设置二进制日志单独目录 [root@centos8-hkping ~]#cat /etc/my.cnf [mysqld] server_id=150 log-bin=/data/mysql/logbin/mysql-bin [root@centos8-hkping ~]#mkdir -p /data/mysql/logbin [root@centos8-hkping ~]#chown -R mysql.mysql /data/mysql/ [root@centos8-hkping ~]#systemctl restart mysqld [root@centos8-hkping ~]#ll /data/mysql/logbin/ total 8 -rw-r----- 1 mysql mysql 156 Mar 15 20:29 mysql-bin.000001 -rw-r----- 1 mysql mysql 36 Mar 15 20:29 mysql-bin.index mysql> select @@server_id; +-------------+ | @@server_id | +-------------+ | 150 | +-------------+ 1 row in set (0.00 sec) 5.查看从二进制日志的文件和位置开始进行复制 mysql> show master logs; +------------------+-----------+-----------+ | Log_name | File_size | Encrypted | +------------------+-----------+-----------+ | mysql-bin.000001 | 156 | No | +------------------+-----------+-----------+ 1 row in set (0.00 sec) 6.创建有复制权限的用户账号 mysql> create user repluser@'10.0.0.%' identified by '123456'; mysql> grant replication slave on *.* to repluser@'10.0.0.%'; #从节点配置 1.修改mysql配置文件 [root@centos8-hkping ~]#cat /etc/my.cnf !includedir /etc/my.cnf.d [mysqld] server_id=155 read-only 2.使用有复制权限的用户账号连接至主服务器,并启动复制线程 [root@centos8-hkping ~]#systemctl restart mysqld mysql> CHANGE MASTER TO -> MASTER_HOST='10.0.0.150', -> MASTER_USER='repluser', -> MASTER_PASSWORD='123456', -> MASTER_PORT=3306, -> MASTER_LOG_FILE='mysql-bin.000001', -> MASTER_LOG_POS=156; mysql> start slave; mysql> show slave status\G;
###主从复制(现实环境已有数据库版)###
#主节点配置 1.安装mysql [root@centos8-hkping ~]#yum -y install mysql-server 2.立即并且开机启动mysqld [root@centos8-hkping ~]#systemctl enable --now mysqld [root@centos8-hkping ~]#mysql mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec) 3.检查开启二进制日志 mysql> select @@log_bin; +-----------+ | @@log_bin | +-----------+ | 1 | +-----------+ 1 row in set (0.00 sec) 4.设置全局唯一的id号并设置二进制日志单独目录 [root@centos8-hkping ~]#cat /etc/my.cnf [mysqld] server_id=150 log-bin=/data/mysql/logbin/mysql-bin [root@centos8-hkping ~]#mkdir -p /data/mysql/logbin [root@centos8-hkping ~]#chown -R mysql.mysql /data/mysql/ [root@centos8-hkping ~]#systemctl restart mysqld [root@centos8-hkping ~]#mysql -e 'show databases;' +--------------------+ | Database | +--------------------+ | hellodb | | information_schema | | mysql | | performance_schema | | sys | +--------------------+ #备份主节点所有数据库 [root@centos8-hkping ~]#mysqldump -A -F --master-data=1 --single-transaction > /data/all.sql 5.创建有复制权限的用户账号 mysql> create user repluser@'10.0.0.%' identified by '123456'; mysql> grant replication slave on *.* to repluser@'10.0.0.%'; 6.复制数据库备份到从节点 [root@centos8-hkping ~]#scp /data/all.sql 10.0.0.155:/data #从节点配置 1.修改mysql配置文件 [root@centos8-hkping ~]#cat /etc/my.cnf !includedir /etc/my.cnf.d [mysqld] server_id=155 read-only 2.使用有复制权限的用户账号连接至主服务器,并启动复制线程 [root@centos8-hkping ~]#systemctl restart mysqld [root@centos8-hkping ~]#vim /data/all.sql CHANGE MASTER TO MASTER_HOST='10.0.0.150', MASTER_USER='repluser', MASTER_PASSSWORD='123456', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=156; mysql> set sql_log_bin=0; mysql> source /data/all.sql mysql> start slave; mysql> show slave status\G;
###主主复制###
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | [root@hkping ~]#hostnamectl set -hostname master1 [root@hkping ~]#hostnamectl set -hostname master2 [root@master1 ~]#yum install -y mysql-server [root@master2 ~]#yum install -y mysql-server [root@master1 ~]#cat /etc/my.cnf [mysqld] server-id=150 log-bin=/data/mysql/mysql-bin [root@master2 ~]#cat /etc/my.cnf [mysqld] server-id=155 log-bin=/data/mysql/mysql-bin [root@master1 ~]#mkdir /data/myssql -p ; chown -R mysql.mysql /data/mysql/ [root@master2 ~]#mkdir /data/myssql -p ; chown -R mysql.mysql /data/mysql/ [root@master1 ~]#systemctl enable --now mysqld [root@master2 ~]#systemctl enable --now mysqld [root@master1 ~]#mysql mysql> show master logs; +------------------+-----------+-----------+ | Log_name | File_size | Encrypted | +------------------+-----------+-----------+ | mysql-bin.000001 | 179 | No | | mysql-bin.000002 | 179 | No | | mysql-bin.000003 | 156 | No | +------------------+-----------+-----------+ 3 rows in set (0.00 sec) mysql> create user repluser@ '10.0.0.%' identified by '123456' ; mysql> grant replication slave on *.* to repluser@ '10.0.0.%' ; [root@master2 ~]#mysql mysql> show master logs; +------------------+-----------+-----------+ | Log_name | File_size | Encrypted | +------------------+-----------+-----------+ | mysql-bin.000001 | 179 | No | | mysql-bin.000002 | 156 | No | +------------------+-----------+-----------+ 2 rows in set (0.00 sec) #master2 mysql> CHANGE MASTER TO -> MASTER_HOST= '10.0.0.150' , -> MASTER_USER= 'repluser' , -> MASTER_PASSWORD= '123456' , -> MASTER_PORT=3306, -> MASTER_LOG_FILE= 'mysql-bin.000003' , -> MASTER_LOG_POS=156; mysql> start slave; mysql> show slave status\G mysql> show master logs; +------------------+-----------+-----------+ | Log_name | File_size | Encrypted | +------------------+-----------+-----------+ | mysql-bin.000001 | 179 | No | | mysql-bin.000002 | 695 | No | +------------------+-----------+-----------+ #master1 CHANGE MASTER TO MASTER_HOST= '10.0.0.155' , MASTER_USER= 'repluser' , MASTER_PASSWORD= '123456' , MASTER_PORT=3306, MASTER_LOG_FILE= 'mysql-bin.000002' , MASTER_LOG_POS=695; mysql> start slave; mysql> show slave status\G |
2、xtrabackup实现全量+增量+binlog恢复库
#1.安装xtrabackup包 [root@centos8-hkping /]#ll percona-xtrabackup-80-8.0.23- [root@centos8-hkping /]#yum -y install percona-xtrabackup-80-8.0.23-16.1.el8.x86_64.rpm #2.在原主机备份到/backup [root@centos8-hkping /]#mkdir /backup [root@centos8-hkping /]#xtrabackup -uroot -pmagedu --backup --target-dir=/backup/base #增量备份 [root@centos8-hkping /]#xtrabackup -uroot -pmagedu --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base #复制备份目录到目标主机 [root@centos8-hkping /]#scp -r /backup/* 10.0.0.155:/ 3.在目标主机上还原 #预准备完成备份,此选项--apply-log-only阻止回滚未完成事务 [root@centos8-hkping /]xtrabackup --apply-log-only --target-dir=/backup/base #合并第一次增量备份到完全备份 [root@centos8-hkping /]xtrabackup --apply-log-only --target-dir=/backup/base--incremental-dir=/backup/inc1 4.复制到数据库目录,注意数据库目录必须为空,MySQL服务不能启动 [root@centos8-hkping /]xtrabackup --copy-back --target-dir=/backup/base [root@centos8-hkping /]chown -R mysql:mysql /var/lib/mysql [root@centos8-hkping /]systemctl start mysqld
3、MyCAT实现MySQL读写分离
#所有主机的系统环境: [root@centos8-hkping ~]#cat /etc/centos-release CentOS Linux release 8.5.2111 #服务器共三台 mycat-server 10.0.0.8 #内存建议2G以上 mysql-master 10.0.0.18 MySQL 8.0 或者Mariadb 10.3.17 mysql-slave 10.0.0.28 MySQL 8.0 或者Mariadb 10.3.17 1.安装主从数据库 [root@centos8-hkping ~]#wget http://dl.mycat.org.cn/1.6.7.6/20210303094759/Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz [root@centos8-hkping ~]#hostnamectl set-hostname master [root@centos8-hkping ~]#hostnamectl set-hostname slave [root@centos8-hkping ~]#hostnamectl set-hostname mycat [root@centos8-master ~]#yum install -y mysql-server [root@centos8-slave ~]#yum install -y mysql-server 2.配置主数据库 [root@master ~]#cat /etc/my.cnf [mysqld] server-id=155 [root@master ~]#systemctl restart mysqld mysql> show master logs; +---------------+-----------+-----------+ | Log_name | File_size | Encrypted | +---------------+-----------+-----------+ | binlog.000001 | 156 | No | +---------------+-----------+-----------+ mysql> create user repluser@'10.0.0.%' identified by '123456'; mysql> grant replication slave on *.* to repluser@'10.0.0.%'; 3.配置从数据库 [root@slave ~]#cat /etc/my.cnf [mysqld] server-id=160 [root@slave ~]#systemctl start mysqld [root@slave ~]#mysql CHANGE MASTER TO MASTER_HOST='10.0.0.155', MASTER_USER='repluser', MASTER_PASSWORD='123456', MASTER_PORT=3306, MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=156; mysql> start slave; mysql> show slave status\G 4.测试主从复制数据 [root@master ~]#ll hellodb_innodb.sql [root@master ~]#mysql < hellodb_innodb.sql mysql> show databases; +--------------------+ | Database | +--------------------+ | hellodb | | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 5.安装mycat服务器 [root@mycat ~]#yum -y install java [root@mycat ~]#mkdir /apps [root@mycat ~]#ll Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz -rw-r--r-- 1 root root 26030477 Mar 3 2021 Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz [root@mycat ~]#tar xvf Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz -C /apps/ [root@mycat ~]#echo 'PATH=/apps/mycat/bin:$PATH' > /etc/profile.d/mycat.sh [root@mycat ~]#. /etc/profile.d/mycat.sh [root@mycat ~]#mycat start Starting Mycat-server... [root@mycat ~]#tail -f /apps/mycat/logs/wrapper.log ...... INFO | jvm 1 | 2022/03/16 16:55:25 | MyCAT Server startup successfully. see logs in logs/mycat.log [root@mycat ~]#ss -ntl State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 *:8066 *:* 6.配置mycat服务器配置文件server.xml [root@mycat ~]#vim /apps/mycat/conf/server.xml <property name="serverPort">3306</property> #修改成3306 <property name="managerPort">9066</property> <property name="idleTimeout">300000</property> <property name="authTimeout">15000</property> <property name="bindIp">0.0.0.0</property> <property name="dataNodeIdleCheckPeriod">300000</property> <property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> <property name="password">magedu</property> #修改密码 7.配置mycat服务器配置文件schema.xml [root@mycat ~]#cp /apps/mycat/conf/schema.xml /apps/mycat/conf/schema.xml.bak2 [root@mycat ~]#vim /apps/mycat/conf/schema.xml <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"> </schema> <dataNode name="dn1" dataHost="localhost1" database="hellodb" /> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="host1" url="10.0.0.155:3306" user="root" password="123456"> <readHost host="host1" url="10.0.0.160:3306" user="root" password="123456" /> </writeHost> </dataHost> </mycat:schema> 8.重启mycat [root@mycat ~]#mycat restart [root@mycat ~]#ss -ntl State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 *:3306 *:* 9.验证主从节点读写分离 #主节点 mysql> create user root@'10.0.0.%' identified by '123456'; mysql> grant all on *.* to root@'10.0.0.%'; mysql> select user,host from mysql.user; +------------------+-----------+ | user | host | +------------------+-----------+ | repluser | 10.0.0.% | | root | 10.0.0.% | #客户端测试 [root@centos7 ~]# mysql -uroot -pmagedu -h 10.0.0.150 MySQL [(none)]> show databases; +----------+ | DATABASE | +----------+ | TESTDB | MySQL [(none)]> use TESTDB MySQL [TESTDB]> select @@server_id; +-------------+ | @@server_id | +-------------+ | 160 | +-------------+ #从节点开启通用日志,测试读操作 mysql> show variables like 'general%'; +------------------+--------------------------+ | Variable_name | Value | +------------------+--------------------------+ | general_log | OFF | | general_log_file | /var/lib/mysql/slave.log | +------------------+--------------------------+ mysql> set global general_log=1; [root@slave ~]#tail -f /var/lib/mysql/slave.log 2022-03-16T09:37:30.778464Z 31 Query select * from teachers #主节点开启通用日志,测试写操作 mysql> set global general_log=1; [root@master ~]#tail -f /var/lib/mysql/master.log 2022-03-16T09:39:43.037074Z 47 Query update teachers set age=40 where tid=4 #测试从节点挂了 [root@slave ~]#systemctl stop mysqld #主节点自动顶替从节点读功能 MySQL [TESTDB]> select * from teachers; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 2 Current database: TESTDB +-----+---------------+-----+--------+ | TID | Name | Age | Gender | +-----+---------------+-----+--------+ | 1 | Song Jiang | 45 | M | | 2 | Zhang Sanfeng | 94 | M | | 3 | Miejue Shitai | 77 | F | | 4 | Lin Chaoying | 40 | F | +-----+---------------+-----+--------+ 4 rows in set (0.06 sec) #恢复从节点后,查询重新在从节点进行 [root@slave ~]#systemctl start mysqld MySQL [TESTDB]> select @@server_id; +-------------+ | @@server_id | +-------------+ | 160 | +-------------+ #主节点挂了,任何操作都会失败 [root@master ~]#systemctl stop mysqld MySQL [TESTDB]> select @@server_id; ERROR 1184 (HY000): java.net.ConnectException: Connection refused
4、ansible常用模块介绍
1.Command模块 在远程主机执行命令,此为默认模块,可忽略-m选项 2.Shell模块 和command相似,用shell执行命令,支持各种符合,比如:*,$,> 3.Script模块 在远程主机上运行ansible服务器上的脚步(无需执行权限) 4.Copy模块 从ansible服务器主控端复制文件到远程主机 5.Get_url模块 用于将文件从http、https或ftp下载到被管理机节点上 6.Fetch模块 从远程主机提取文件至ansible的主控端,copy相反,目前不支持目录 7.File模块 设置文件属性,创建软链接等 8.stat模块 检查文件或文件系统的状态 9.unarchive模块 解包解压缩 10.Archive模块 打包压缩保存在被管理节点 11.Hostname模块 管理 主机名 12.Cron模块 计划任务 13.Yum和Apt模块 yum管理软件包,只支持RHEL、Centos、fdora,不支持ubuntu其它版本 14.yum_repository模块 帮助我们管理远程主机上的yum仓库 15.Service模块 管理服务 16.User模块 管理用户 17.Group模块 管理组 18.Lineinfile模块 修改某个文件的单行进行替换的时候使用 19.Replace模块 基于正则进行匹配和替换 20.SELinux模块 管理SELinx策略 21.reboot模块 重启计算机模块 22.mount模块 挂载和卸载文件系统 23.Setup模块 setup模块来收集主机的系统信息 24.debug模块 用于输出信息,并且通过msg定制输出的信息内容
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通