mysql定时备份与恢复


备份脚本

cd /myData/mysqlbackup
vim backup.sh

内容如下:
--------------------------
#!/bin/bash
#要备份的数据库名称
db_name='db1'
#备份文件存放目录
backup_dir='/myData/mysqlbackup/'
current_time=$(date +'%Y-%m-%d_%H%M%S')
filepath=$backup_dir$current_time'.sql.gz'
#gzip 压缩,压缩前800k,压缩后200k
echo '开始导出数据库...'
#-F刷新日志,-R备份存储过程
mysqldump --defaults-extra-file=/myData/mysqlbackup/login_info.cnf -F -R  $db_name | gzip > $filepath
echo '导出成功,文件名为: '$filepath
--------------------------
vim login_info.cnf
内容如下:
--------------------------
[mysqldump]
#此处指定max_allowed_packet,需注释掉/etc/my.cnf中的max_allowed_packet
max_allowed_packet=200M 
host=127.0.0.1
user=root
password='qif'
--------------------------

阅读全文 »


mysql索引


索引干什么的,如何理解

索引用于快速找出在某个列中有一特定值的行。不使用索引,会全表,扫表越大,花费的时间越多。 如果表中查询的列有一个索引,mysql能快速到达一个位置搜寻到数据 索引就像书的字典,数据犹如数的内容,而读者相当CPU

索引采用B+树

  • 它采用了多叉树的结构,降低了索引结构的深度,避免了传统二叉树结构中绝大部分的随机访问操作
  • 一次性读内存中的需要查找的关键字也就越多,有效减少了磁盘IO,B+树索引查询效率稳定,也有利于进行范围查询
  • B树相比B+树的一个主要区别就在于B树的分支节点上存储着数据,B+树的数据都存储在叶子节点上,分支节点均为索引

索引优缺点

查询效率快,维护效率低

设计原则

  1. 不是越多越好,数据量小的表建立会增加额外的索引开销,数据变更也需要维护索引,太多的索引会增加查询优化器的选择时间
  2. 常更新的表索引越少越好
  3. 不同的值比较多的列才需要建立索引
  4. 某种数据本身具备唯一性的时候,建立唯一性索引,可以保证定义的列的数据完整性,以提高查询熟度
  5. 频繁进行排序或分组的列(group by或者是order by)可以建立索引,提高搜索速度
  6. 经常用于查询条件的字段应该建立索引

阅读全文 »


mysql主从复制


介绍

mysql服务器, 一般有两个线程来负责复制和被复制。

  1. 作为主服务器Master,会把自己的每一次改动都记录到 二进制日志 Binarylog 中。 从服务器会负责来读取这个log, 然后在自己那里再执行一遍。
  2. 作为从服务器Slave, 会用master上的账号登陆到 master上, 读取master的Binarylog, 写入到自己的中继日志 Relaylog, 然后自己的sql线程会负责读取这个中继日志,并执行一遍。

阅读全文 »


CORS解决跨域


SpringBoot中解决跨越

方法上添加跨域

@RestController
public class HelloController {
	@CrossOrigin(value = "http://XXX:8080")
	@GetMapping("/hello")
	public String hello() {
		return "hello";
	}
}

阅读全文 »


生产环境tomcat占用CPU 100%


生产环境CPU逐渐飙升到100%,导致项目卡顿,访问失败

通过top命令查看进程下各个线程的CPU使用情况

top -H -p PID

PID   USE   PR   NI  VIRT  RES   SHR S %CPU   %MEM    TIME+  COMMAND    
23658 qifly  20   0  1842m  136m  13m R  100.2 0.9    1:35.45 java

通过JDK的jstack命令查看线程的堆栈信息,找到出问题的代码

jstack PID|grep -A 20 TID 
说明:PID为JAVA进程ID  TID为16进制的线程ID -A 20为打印20行
经排查为特殊情况导致while死循环导致CPU飙升100%

或者通过jstack将堆栈信息保存至文件中

jstack PID > info.log

阅读全文 »


docker运行项目


安装Docker及配置镜像

安装docker

yum -y install docker
docker --version
systemctl start docker

登录阿里云获取镜像加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://qifjlwgz.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

阅读全文 »