如何优雅的备份MySQL数据
1 备份锁分析
XtraBackup 备份的时候出现锁问题,然后查文档有以下几个方案,每种方案都有优势与不足,根据需求选择,我们使用的是 kill 其他阻塞线程方案
1.1 死锁现象及原因:1.2 Flush table with read lock
XtraBackup 可以实现 Innodb 表的无锁备份,但是一个数据库中,即使所有的业务表都是 innodb 表,但是还存在一些 MySQL 系统库下的 user 表等,均是 myisam 表(MySQL 8.0 均替换为 InnoDB),同时备份过程需要获取 Binlog 文件名和位置,也要保证表定义文件的一致性,所以从整个实例的角度,即使用 XtraBackup 还是有一段时间需要执行 Flush table with read lock 全局锁的,会对用户访问产生影响,同时由于 Flush table with read lock 的一些特殊性,如果稍不注意,可能会对用户访问数据库产生致命影响。
1.3 使用 MTS:
slave_preserve_commit_order=1 时,relay-log 中事务的提交 ...
MariaDB生产级别高可用
此方案只适合 mariadb,MySQL 请不要使用此方案
此方案实现功能
自动故障转移
自动故障恢复,如 master 宕掉后重启自动加入集群成为 slave
读写分离
binlog 日志备份与解析
1 环境规划
ip
端口
名称
binlog 路径
10.0.16.12
10.2.41
11
Master
/var/log/mysql
10.0.16.12
10.2.41
12
Slave1
/var/log/mysql
10.0.16.12
10.2.41
13
Slave2
/var/log/mysql
10.0.16.12
10.2.41
14
Slave3
/var/log/mysql
10.0.16.12
6.1.4-1
5506
maxscale
/data/maxscale1_binlog
10.0.16.12
6.1.4-1
5507
maxscale
/data/ma ...
Nginx Ingress常用配置
发现大部分架构都是 nginx 代理后端,挂载前端提供服务。但是放到 k8s 还得单独启动个 nginx 部署前端,这就造成两个问题。
1:配置复杂,每加有新的服务调用,不仅要改 ingress,web 服务的 nginx 配置文件也需要修改。
2:访问复杂,变成了 dns>ingress>web>后端
经过修改,我们的架构图
1 正常需要添加的参数123456789nginx.ingress.kubernetes.io/client-body-buffer-size: 2mnginx.ingress.kubernetes.io/enable-access-log: 'true'nginx.ingress.kubernetes.io/enable-cors: 'true'nginx.ingress.kubernetes.io/proxy-body-size: 10mnginx.ingress.kubernetes.io/proxy-buffer-size: 2mnginx.ingress.kubernetes.io/pr ...
ingress常用配置
发现大部分架构都是 nginx 代理后端,挂载前端提供服务。但是放到 k8s 还得单独启动个 nginx 部署前端,这就造成两个问题。
1:配置复杂,每加有新的服务调用,不仅要改 ingress,web 服务的 nginx 配置文件也需要修改。
2:访问复杂,变成了 dns>ingress>web>后端
经过修改,我们的架构图
1 正常需要添加的参数123456789nginx.ingress.kubernetes.io/client-body-buffer-size: 2mnginx.ingress.kubernetes.io/enable-access-log: 'true'nginx.ingress.kubernetes.io/enable-cors: 'true'nginx.ingress.kubernetes.io/proxy-body-size: 10mnginx.ingress.kubernetes.io/proxy-buffer-size: 2mnginx.ingress.kubernetes.io/pr ...
nginx问题记录
1 访问过慢
现象: 突然f5 检查后端 Nginx 节点,大部分 Nginx 节点总是连接超时,而看监控 nginx 资源使用率都正常
1.1 尝试查看日志123...... shm_add_node::ngx_slab_alloc_locked() failed: used_size[36127530], used_node[10178]...
1.1.1 查看内存分配
其实不是这原因,以为请求分配不了内存,但这里写一下查询方法
1234cat /proc/buddyinfoNode 0, zone DMA 1 0 0 0 2 1 1 0 1 1 3 Node 0, zone DMA32 25063 30201 27755 7226 864 202 138 123 105 0 0 Node 0, zone Normal 470959 338802 126112 42615 23679 ...
记录一次解决cc攻击
记录一次 cc 攻击,虽然没完全解决,但是屏蔽大量攻击,减轻服务器负担.此文档只是简单介绍下 web 防火墙原理
1 泳道图
2 配置 nginx
cat conf.d/wxh.super.co.conf
123456789101112131415161718192021222324252627282930limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;server {server_name wxh.super.com;listen *:80;root /opt/web_html/wxh.super.com;access_log logs/wxh.super.com_access.log main;error_log logs/wxh.super.com_error.log;if ($request_uri ~* "kto0a81u") {return 503;} #只要访问以kto0a81u为结尾的连接自动跳到503error_page 4 ...
Apollo 部署与LDAP
1 配置 MySQL 数据库1.1 导数据库Apollo 的表结构对timestamp使用了多个 default 声明,所以需要 5.6.5 以上版本。
连接上 MySQL 后,可以通过如下命令检查:
1SHOW VARIABLES WHERE Variable_name = 'version';
1.2 下载表结构1wget https://github.com/apolloconfig/apollo-build-scripts/blob/master/sql/apolloconfigdb.sql
1.3 导入表结构1234567mysql -u root -pCREATE DATABASE DevApolloConfigDB;CREATE DATABASE ApolloPortalDB;USE DevApolloConfigDBsource apolloconfigdb.sqlUSE ApolloPortalDBsource apolloportaldb.sql
2 部署后端2.1 添加 Apollo Helm Chart 仓库helm repo add ...
Apollo使用与配置
1 配置 MySQL 数据库1.1 导数据库Apollo 的表结构对timestamp使用了多个 default 声明,所以需要 5.6.5 以上版本。
连接上 MySQL 后,可以通过如下命令检查:
1SHOW VARIABLES WHERE Variable_name = 'version';
1.2 下载表结构1wget https://github.com/apolloconfig/apollo-build-scripts/blob/master/sql/apolloconfigdb.sql
1.3 导入表结构1234567mysql -u root -pCREATE DATABASE DevApolloConfigDB;CREATE DATABASE ApolloPortalDB;USE DevApolloConfigDBsource apolloconfigdb.sqlUSE ApolloPortalDBsource apolloportaldb.sql
2 部署后端2.1 添加 Apollo Helm Chart 仓库helm repo add ...
Kubernetes自定义权限
1 创建账号1.1 创建私钥,一定要用 root 用户(umask 077; openssl genrsa -out test.key 2048)
1.2 基于私钥生成证书,由 k8s 集群的 ca.crt 签署
CN 为账号名称,OU 为组
openssl req -new -key test.key -out test.csr -subj "/CN=test"
ca.crt 与 ca.key 是 k8s 的秘钥
openssl x509 -req -in test.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out test.crt -days 365
1.3 查看证书openssl x509 -in test.csr -text -noout
1.4 k8s 创建用户,并使用证书认证kubectl config set-credentials test --client-certificate=test.crt --client-key=test.key --embed-certs=true
1.5 查 ...
Crontabs笔记
不生效的原因之一:
环境变量没有加载,脚本最上面加上自己的环境变量
source /home/user/.bashrc
1 安装yum install crontabs
crontab 命令说明
参数
解释
-e
编辑该用户的计时器设置。
-l
列出该用户的计时器设置。
-r
删除该用户的计时器设置。
-u <用户名称>
指定要设定计时器的用户名称。
2 添加任务crontab -e
120 */1 * * * command0 */2 * * * command
2.1 查询任务crontab -l -u root #查看 root 用户
120 */1 * * * command0 */2 * * * command
基本格式 :
12* * * * * command分 时 日 月 周 命令
第 1 列分钟 1 ~ 59 每分钟用或者/1
第 2 列小时 1 ~ 23(00 点)
第 3 列日期 1 ~ 31
第 4 列月份 1 ~ 12
第 5 列标识号星期 0 ~ 6(0 星期天)
...