第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';

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;

浙公网安备 33010602011771号