第8周---防火墙-mysql数据库

总结防火墙使用场景

1防止恶意攻击

拒绝端口扫描等,拒绝dos攻击

2流量控制

基于策略放行控制

带宽管理

解释TCP/IP传输访问数据流如何进出主机的

流出

1、应用层,生成数据(HTTP请求),指定目标和端口

2、传输层,封装成tcp段数据,添加端口

3、网络层将tcp段数据封装成ip数据包,并添加ip地址

4、将ip包封装成帧,添加mac地址

流入

5、判断mac地址是否为本机,将帧拆成ip包,去除mac地址,交给网络层

6、判断ip是否为本机,将ip包,去除ip地址,交给传输层

7、根据端口找到指定的进程,交给对应应用程序

8、应用层读取数据并处理

完成mysql二进制部署以及多实例部署

安装基础依赖

apt install libaio-dev numactl libnuma-dev libncurses-dev

curl -O http://launchpadlibrarian.net/646633572/libaio1_0.3.113-4_amd64.deb

dpkg -i libaio1_0.3.113-4_amd64.deb

创建用户组和用户

groupadd -r mysql

useradd -r -g mysql -s /sbin/nologin mysql

软件安装

mkdir /data/softs -p &&  cd /data/softs/

wget

https://downloads.mysql.com/archives/get/p/23/file/mysql-8.4.0-linux-glibc2.28-x86_64.tar.xz

tar xf mysql-8.4.0-linux-glibc2.28-x86_64.tar.xz

mv mysql-8.4.0-linux-glibc2.28-x86_64 /usr/local/mysql

设置环境变量

echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh

source /etc/profile.d/mysql.sh

编辑配置文件

mkdir /usr/local/mysql/etc -p

[mysql]
port = 3306
socket = /usr/local/mysql/data/mysql.sock
[mysqld]
port = 3306
mysqlx_port = 33060
mysqlx_socket = /usr/local/mysql/data/mysqlx.sock
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /usr/local/mysql/data/mysql.sock
pid-file = /usr/local/mysql/data/mysqld.pid
log-error = /usr/local/mysql/log/error.log
default-authentication-plugin = mysql_native_password

创建日志目录和数据目录

mkdir /usr/local/mysql/data

mkdir /usr/local/mysql/log

chown -R mysql:mysql /usr/local/mysql/

环境初始化

cd /usr/local/mysql/

bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

获取默认密码

tail -f /usr/local/mysql/log/error.log

定制启动脚本

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

systemctl daemon-reload

/etc/init.d/mysqld start

解释RDBMS的库、表、视图、索引、设计范式

库 用来存储表,视图,索引,存储过程,用户权限等数据

用于数据隔离

表 存储数据的基本结构,主要概念有行、列、主键、外键

视图 虚拟数据,由一条select语句创建,简化查询逻辑,以及隐藏部分数据

索引 用于加速数据查询检索的数据结构,类似于书的目录,会一定程度上降低数据写入的速度,因此使用时,需要谨慎

范式

1NF 每个字段是原子的,不可分

2NF 满足1NF,并且所有非主键字段都完全依赖于主键字段

3NF 满足2NF,并且不允许有非主键字段之间存在传递依赖

总结mysql的全局变量、会话变量、配置文件选项、启动相关选项

全局变量:对所有会话生效

查看方式:show global variables;

会话变量:只对当前会话生效

查看方式: show session variables;

配置文件选项:提供持久化配置

生效需要重启mysqld服务

启动相关选项:通过启动命令显式指定参数

总结mysql执行的原理

客户端 连接认证 sql解析 预处理 查询优化 调用存储引擎 读取、修改数据 结果处理 返回客户端

总结DDL、DML

ddl 是数据定义语言,用于创建修改表结构,事务内不可回滚

dml 是数据修改语言,用于新增修改删除数据,事务内可回滚

总结一个mysql用户管理场景,例如: 授权开发只读访问某个或某几个库

create user user1@'%' identified by '123456';

grant select,insert,update,delete on db1.* to 'user1'@'%';

flush privileges;

管理员权限

grant all privileges on *.* to 'user1'@'%' with grant option;
flush privileges;

撤销权限

revoke all privileges,grant option from 'user1'@'%' ;
revoke update from 'user1'@'%';

查看权限

show grants;

总结mysql查询时的执行流程

连接认证 sql解析 预处理 语句优化 执行,调用存储引擎 数据读取 排序,聚合 返回客户端

总结mysql事务原理

原子性,一致性,隔离性,持久性

总结mysql日志相关的查询及分析

日志类型 日志作用 日志参数
错误日志error log 记录启动运行停止中的错误日志 log_error
慢查询日志slow query log 记录执行超过指定时间或者不走索引的查询sql slow_query_log
二进制log 记录不走所有的ddl和dml的sql log_bin

binlog相关命令

binlog_format参数 用来指定binlog记录的形式

有这三个值

row 按行记录,记录每一行数据变更的记录

statement 按语句记录,记录每条语句,如果碰到调用现在时间之类的函数,会有问题

mixed 会根据情况选择上两种记录方式,但行为本身不可控

show master status; 查看当前正在写入的binlog文件

show variables like '%log_bin%'; 查看log_bin的参数值

show binary logs; 查看全部的二进制日志文件

总结mysql的热备、时间点还原、在线表结构变更pt-schema-online分析mysql高可用各方案的优劣使用场景

逐项完成各高可用方案

热备、时间点还原

mysqldump还原
mysqldump --single-transaction --master-data=2 --routines --triggers -B db1 >db1.sql
mysqlbinlog还原
mysqlbinlog --start-position=6716649 --stop-datetime="2026-01-01 10:59:00" /data/mysql/log/mysql-bin.000005 >recovery.sql

总结ProxySQL+MGR单主,参考: https://www.cnblogs.com/f-ck-need-u/category/1252812.html

MGR集群

跨主机集群免密认证

 ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa
 ssh-copy-id root@127.0.0.1
 scp -r ~/.ssh root@10.0.0.15:
 scp -r ~/.ssh root@10.0.0.18:

mysql部署

 yum install mysql-server -y
 systemctl enable --now mysqld.service
 mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 
'123456';"

主机配置文件调整

#生成uuid
uuidgen
#备份配置文件
cp /etc/my.cnf.d/mysql-server.cnf{,.bak}
[root@rocky12 my.cnf.d ]# cat mysql-server.cnf
#
# This group are read by MySQL server.
# Use it for options that only the server (but not clients) should see
#
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/en/server-configuration-defaults.html

# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/run/mysqld/mysqld.pid
default_authentication_plugin=mysql_native_password
plugin_dir=/usr/lib64/mysql/plugin
server_id=12
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
log_bin=binlog
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE
transaction_write_set_extraction=XXHASH64
plugin_load_add='group_replication.so'
group_replication_group_name="175861c1-3507-431b-a34d-b0e79b8d9edb"
group_replication_start_on_boot=off
group_replication_local_address="10.0.0.12:33061"
group_replication_group_seeds="10.0.0.12:33061,10.0.0.15:33061,10.0.0.18:33061"
group_replication_bootstrap_group=off
report_port=3306
report_host=10.0.0.12

集群服务器分别执行如下命令

SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
GRANT CONNECTION_ADMIN ON *.* TO rpl_user@'%';
GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';
GRANT GROUP_REPLICATION_STREAM ON *.* TO rpl_user@'%';
create user 'remote'@'%' identified with mysql_native_password by '123456';
grant all privileges on *.* to remote@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
RESET MASTER;

主环境启动集群

SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION USER='rpl_user', PASSWORD='123456';

从环境启动集群

CHANGE REPLICATION SOURCE TO SOURCE_USER='rpl_user', SOURCE_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';
START GROUP_REPLICATION USER='rpl_user', PASSWORD='123456';

image-20260119154947097

proxysql

安装

配置yum源

cat <<EOF | tee /etc/yum.repos.d/proxysql.repo
[proxysql_repo]
name= ProxySQL
baseurl=http://repo.proxysql.com/ProxySQL/proxysql-1.4.x/centos/\$releasever
gpgcheck=1
gpgkey=http://repo.proxysql.com/ProxySQL/repo_pub_key
EOF

yum安装

yum -y install proxysql

启动

/etc/init.d/proxysql start

配置proxysql

进入proxysql管理界面

mysql -uadmin -padmin -h127.0.0.1 -P6032 --prompt 'Admin> '

添加后端数据库服务

delete from mysql_servers;

insert into mysql_servers(hostgroup_id,hostname,port) 
values(10,'10.0.0.12',3306),
      (10,'10.0.0.15',3306),
      (10,'10.0.0.18',3306);
--运行时生效
load mysql servers to runtime;
--持久化保存配置	
save mysql servers to disk;
--查询节点状态
select hostgroup_id,hostname,port,status,weight from mysql_servers;
posted @ 2026-01-19 15:56  半缘修道%  阅读(0)  评论(0)    收藏  举报