首页
复制
搜索
前进
后退
重载网页
和我当邻居
给我留言吧
首页
关于
友链
留言
壁纸
Search
1
关于《杀死那个石家庄人》背后的故事
70 阅读
2
佳木斯的夜
34 阅读
3
PHP八大设计模式
32 阅读
4
以梦喂马
32 阅读
5
centos7安装Wkhtmltopdf
27 阅读
编程技术
网络安全
生活杂记
登录
Search
标签搜索
PHP
随笔
Mysql
Laravel-Admin
Laravel
设计模式
Ab
Linux
MAC
支付
CentOs
sh
如梦初醒
累计撰写
40
篇文章
累计收到
7
条评论
首页
栏目
编程技术
网络安全
生活杂记
页面
关于
友链
留言
壁纸
搜索到
9
篇与
的结果
2022-03-15
Sh备份数据库
sh脚本备份数据库#!/bin/bash BACKUP=/u01/backup/MySQL/ DATETIME=$(date '+%Y-%m-%d') DB_HOST=127.0.0.1 DB_USER=root DB_PWD=root DATABASE1=test DATABASE2=test_api mkdir -p "${BACKUP}/$DATETIME" TIME=$(date '+%H%M%S') mysqldump -u${DB_USER} -p${DB_PWD} -h${DB_HOST} -q -R --databases $DATABASE1 | gzip > ${BACKUP}/$DATETIME/${TIME}_${DATABASE1}.sql.gz mysqldump -u${DB_USER} -p${DB_PWD} -h${DB_HOST} -q -R --databases $DATABASE2 | gzip > ${BACKUP}/$DATETIME/${TIME}_${DATABASE2}.sql.gzcrontab定时任务语法可以参考这个网站https://toolhut.cn/tools/crontab
2022年03月15日
11 阅读
0 评论
0 点赞
2022-03-15
Mysql创建用户&&赋予权限
查询所有的用户select user,host from mysql.user;查看某个用户的权限show grants for root@'localhost';创建一个新用户{message type="info" content="用户名为:testuser 密码为:123456"/}create user 'testuser' identified by '123456';给予这个用户order表的create update select权限grant create,update,select on test.order to testuser@'%' identified by '123456';常用的权限有all privileges:所有权限。 select:读取权限。 delete:删除权限。 update:更新权限。 create:创建权限。 drop:删除数据库、数据表权限移除用户权限 REVOKE USAGE ON *.* FROM 'testuser'@'%'; REVOKE ALL PRIVILEGES ON `test`.* FROM 'testuser'@'%';授予用户在某个数据库上执行所有存储过程的权限GRANT EXECUTE ON `test`.* TO 'testuser'@'%';授予某个用户执行某个存储过程的权限GRANT EXECUTE ON PROCEDURE `procedure_name` TO 'testuser'@'%'刷新权限 FLUSH PRIVILEGES;
2022年03月15日
10 阅读
0 评论
0 点赞
2022-03-14
Mysql根据经纬度计算距离并排序
计算公式纬度:31.182592 store_locy 经度:121.431744 store_locx按M计算{callout color="#f0ad4e"}计算出来的结果单位为m{/callout} SELECT *, ROUND( 6378.138 * 2 * ASIN( SQRT( POW( SIN( ( 31.182592 * PI() / 180 - store_locy * PI() / 180 ) / 2 ), 2 ) + COS(31.182592 * PI() / 180) * COS(store_locy * PI() / 180) * POW( SIN( ( 121.431744 * PI() / 180 - store_locx * PI() / 180 ) / 2 ), 2 ) ) ) * 1000 ) AS distance FROM t_merchant_store ORDER BY distance ACS按KM计算{callout color="#f0ad4e"}计算出来的结果单位为km{/callout} SELECT *, ( 2 * 6378.137 * ASIN( SQRT( POW( SIN( PI( ) * ( 121.431744- store_locx ) / 360 ), 2 ) + COS( PI( ) * 31.182592 / 180 ) * COS( store_locy * PI( ) / 180 ) * POW( SIN( PI( ) * ( 31.182592- store_locy ) / 360 ), 2 ) ) ) ) AS distance FROM t_merchant_store ORDER BY distance ASC转自: https://blog.csdn.net/lishuaiqi_d/article/details/105428037
2022年03月14日
15 阅读
0 评论
0 点赞
2022-03-08
Mysql主从|笔记
为什么要做主从复制{callout color="#f0ad4e"}1、在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作2、做数据的热备3、架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能{/callout}原理{message type="info" content="binlog(主库中保存所有更新事件日志的二进制文件)"/}主从复制的基础是主库记录数据库的所有变更记录到binlog。binlog是数据库服务器启动的那一刻起,保存所有修改数据库结构或内容的一个文件。mysql主从复制是一个异步的复制过程,主库发送更新事件到从库,从库读取更新记录,并执行更新记录,使得从库的内容与主库保持一致。在主库里,只要有更新事件出现,就会被依次地写入到binlog里面,之后会推到从库中作为从库进行复制的数据源。{dotted startColor="#ff6c6c" endColor="#1989fa"/}{message type="info" content="binlog输出线程"/}每当有从库连接到主库的时候,主库都会创建一个线程然后发送binlog内容到从库。对于每一个即将发送给从库的sql事件,binlog输出线程会将其锁住。一旦该事件被线程读取完之后,该锁会被释放,即使在该事件完全发送到从库的时候,该锁也会被释放。在从库里,当复制开始的时候,从库就会创建两个线程进行处理:{message type="info" content="从库I/O线程"/}当START SLAVE语句在从库开始执行之后,从库创建一个I/O线程,该线程连接到主库并请求主库发送binlog里面的更新记录到从库上。从库I/O线程读取主库的binlog输出线程发送的更新并拷贝这些更新到本地文件,其中包括relay log文件。{message type="info" content="从库的SQL线程"/}从库创建一个SQL线程,这个线程读取从库I/O线程写到relay log的更新事件并执行。可以知道,对于每一个主从复制的连接,都有三个线程(binlog输出线程、从库I/O线程、从库的SQL线程)。拥有多个从库的主库为每一个连接到主库的从库创建一个binlog输出线程,每一个从库都有它自己的I/O线程和SQL线程。{callout color="#f0ad4e"}从库通过创建两个独立的线程,使得在进行复制时,从库的读和写进行了分离。因此,即使负责执行的线程运行较慢,负责读取更新语句的线程并不会因此变得缓慢。比如说,如果从库有一段时间没运行了,当它在此启动的时候,尽管它的SQL线程执行比较慢,它的I/O线程可以快速地从主库里读取所有的binlog内容。这样一来,即使从库在SQL线程执行完所有读取到的语句前停止运行了,I/O线程也至少完全读取了所有的内容,并将其安全地备份在从库本地的relay log,随时准备在从库下一次启动的时候执行语句。{/callout}步骤一:主库db的更新事件(update、insert、delete)被写到binlog步骤二:从库发起连接,连接到主库步骤三:此时主库创建一个binlog dump thread,把binlog的内容发送到从库步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log步骤五:还会创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db搭建{callout color="#f0ad4e"}环境:以宝塔为例服务器:linux{/callout}1.在 主库 创建一个用户CREATE USER 'test'@'%' IDENTIFIED BY 'test';2.给创建的用户赋予权限mysql> grant all privileges on *.* to 'test[账号]'@'%' identified by 'test[密码]' with grant option;3.刷新权限mysql> FLUSH PRIVILEGES;4.查看状态mysql> show master status;5.登陆 从库 执行连接修改 server-id 需要和主库不一致文件位置在 /etc/mysql/mysql.conf.d/mysqld.cnfchange master to master_host='192.168.0.1',master_user='test',master_password='test',master_log_file='mysql-bin.000016',master_log_pos=5501;{callout color="#f0ad4e"}master_user:主服务器的用户master_password: 主服务器的密码master_log_file: 也就是我们一号服务器打印的File表里的信息master_log_pos:主库服务器中Position 这里一定要看清楚{/callout}6.查看状态 show slave status\G如果是yesSlave_IO_Running: Yes Slave_SQL_Running: Yes如果出现No 重新启动下mysql服务即可!Mysql关闭主从主服务器reset master;重启mysql从服务器stop slave; reset slave all;重启mysql
2022年03月08日
16 阅读
0 评论
0 点赞
2021-09-05
笔记 | 深入浅出索引(下)
覆盖索引【举栗】mysql> create table T ( ID int primary key, k int NOT NULL DEFAULT 0, s varchar(16) NOT NULL DEFAULT '', index k(k)) engine=InnoDB;insert into T values(100,1, 'aa'),(200,2,'bb'),(300,3,'cc'),(500,5,'ee'),(600,6,'ff'),(700,7,'gg');执行 select * from T where k between 3 and 5在 k 索引树上找到 k=3 的记录,取得 ID = 300;再到 ID 索引树查到 ID=300 对应的 R3;在 k 索引树取下一个值 k=5,取得 ID=500;再回到 ID 索引树查到 ID=500 对应的 R4;在 k 索引树取下一个值 k=6,不满足条件,循环结束。在这个过程中,回到主键索引树搜索的过程,我们称为回表。执行 select ID from T where k between 3 and 5这时只需要查 ID 的值,而 ID 的值已经在 k 索引树上了,因此可以直接提供查询结果,不需要回表。也就是说,在这个查询里面,索引 k 已经“覆盖了”我们的查询需求,我们称为覆盖索引二级索引查询结果仅仅是主键 此时不需要回表查主键索引 称为覆盖索引由于覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。最左前缀原则(name,age)索引示意图索引项是按照索引定义里面出现的字段顺序排序的联合索引(A, B)意味着不需要建立A的索引了,因为这个联合索引意味着建立了(A,B)和(A)这两种索引如果单使用age作为条件,索引是不会生效的,除非单独建立一个age索引,因为它遵循最左原则索引下推mysql> select * from tuser where name like '张%' and age=10 and ismale=1;MySQL 5.6 引入的索引下推优化(index condition pushdown), 可以在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。无索引下推执行流程索引下推执行流程
2021年09月05日
7 阅读
0 评论
0 点赞
1
2