关于mysql:测评一款永久免费的内网穿透软件

理论工作和生存中,经常遇到以下问题:如何让任何中央都能拜访本人家里的笔记本上的利用?如何让局域网的服务器能够被任何中央拜访到?如何在异地近程解决公司服务问题;企业员工如何在异地拜访公司内网财务/管理系统,能够随时上传下载文档等;对于没有公网 IP 的用户来说,远程管理或在外网拜访内网机器上的服务是一个问题,有很多相似的需要;集体开发者程序员,对微信公众号小程序也须要开发调试等,那么这些问题有什么解决方案呢? 同类型的问题有很多,然而也有简略解决的办法。大多局部用户无非是没有公网ip,也没有工夫本人去搭建一款相似的软件,网上有很多开源的,测试后也很不尽人意。国内企业级的服务商有闪库和网云穿,身边共事包含很多敌人都在应用,配置较简略,简略讲下测评过的闪库的应用办法和注意事项,不懂得能够看以下图示: 简略来说,我是用于在家近程拜访公司电脑,能够近程管制拜访下接口,上传下文件之类的;远程桌面的话配置如下: 咱们先关上下载软件,关上官网是这样的 2、下载后咱们解压双击运行,免装置的 3、运行客户端,没有注册的先注册下账号 4、注册完登录进去,咱们依据提醒操作。先开明收费隧道 5、把隧道信息填写残缺,以3389远程桌面为例: 隧道名字:自定义 内网ip:本机ip,个别为127.0.0.1 内网端口:3389 依据本人利用填写相应的端口 6、配置完点击确定,会看到软件调配了一个外网地址,外网端口也主动显示 http模式,就间接拜访这个映射地址,外网端口默认80.tcp协定的服务咱们就加上外网端口去连贯。 7、最初咱们来测试下,近程是否胜利。 关上电脑自带的远程桌面,输出映射地址 8、能够看到,已胜利连贯远程桌面。 综上是对闪库的测评,是一个新软件,收费的10mbps带宽反对http、tcp。是一款国内的软件,这个也是软件他是能够公有部署再服务器,比拟不便,免费版是集体测试远程桌面,根本够用了。隧道采纳的是双向加密传输的,全协定反对 ,提供公网ip,应用了几天,总体不错,比一些免费的要强,这里不多说,测评全是集体亲自体验!

September 27, 2020 · 1 min · jiezi

关于mysql:MySQL的字符类型

MySQL的字符类型字符类型MySQL提供了多种对于字符存储的类型,然而在大多数状况下咱们只应用char和varchar即可。 类型大小用处CHAR0 - 255字节定长字符串VARCHAR0 - 65535 字节变长字符串TINYBLOB0 - 255字节不超过 255 个字符的二进制字符串TINYTEXT0 - 255字节短文本字符串BLOB0 - 65 535字节二进制模式的长文本数据TEXT0 - 65 535字节长文本数据MEDIUMBLOB0 - 16 777 215字节二进制模式的中等长度文本数据MEDIUMTEXT0 - 16 777 215字节中等长度文本数据LONGBLOB0 - 4 294 967 295字节二进制模式的极大文本数据LONGTEXT0 - 4 294 967 295字节极大文本数据字符集字符串分二进制与非二进制类型,二进制用于贮存图片、声音等文件,非二进制用于贮存文本数据。 非二进制文本受字符集和校对规定影响。 其实字符集说白了就是字符编码。 概念字符集(Character set)是多个字符的汇合,字符集品种较多,每个字符集蕴含的字符个数不同。罕用的字符集有GBK、BIG5、UTF8。 UTF8字符集蕴含文字内容更广,如韩文、日文、德文兼容度更高,也是举荐应用的字符集(UTF8MB4)。 表不设置字符集继承数据库,字段不设置字符集继承表的,所以个别咱们在配置文件中为数据库指定字符集即可。mysql> SHOW CHARACTER SET; -- 查看服务器反对的字符集+----------+---------------------------------+---------------------+--------+| Charset | Description | Default collation | Maxlen |+----------+---------------------------------+---------------------+--------+| armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 || ascii | US ASCII | ascii_general_ci | 1 || big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 || binary | Binary pseudo charset | binary | 1 || cp1250 | Windows Central European | cp1250_general_ci | 1 || cp1251 | Windows Cyrillic | cp1251_general_ci | 1 || cp1256 | Windows Arabic | cp1256_general_ci | 1 || cp1257 | Windows Baltic | cp1257_general_ci | 1 || cp850 | DOS West European | cp850_general_ci | 1 || cp852 | DOS Central European | cp852_general_ci | 1 || cp866 | DOS Russian | cp866_general_ci | 1 || cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 || dec8 | DEC West European | dec8_swedish_ci | 1 || eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 || euckr | EUC-KR Korean | euckr_korean_ci | 2 || gb18030 | China National Standard GB18030 | gb18030_chinese_ci | 4 || gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 || gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 || geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 || greek | ISO 8859-7 Greek | greek_general_ci | 1 || hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 || hp8 | HP West European | hp8_english_ci | 1 || keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 || koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 || koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 || latin1 | cp1252 West European | latin1_swedish_ci | 1 || latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 || latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 || latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 || macce | Mac Central European | macce_general_ci | 1 || macroman | Mac West European | macroman_general_ci | 1 || sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 || swe7 | 7bit Swedish | swe7_swedish_ci | 1 || tis620 | TIS620 Thai | tis620_thai_ci | 1 || ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 || ujis | EUC-JP Japanese | ujis_japanese_ci | 3 || utf16 | UTF-16 Unicode | utf16_general_ci | 4 || utf16le | UTF-16LE Unicode | utf16le_general_ci | 4 || utf32 | UTF-32 Unicode | utf32_general_ci | 4 || utf8 | UTF-8 Unicode | utf8_general_ci | 3 || utf8mb4 | UTF-8 Unicode | utf8mb4_0900_ai_ci | 4 |+----------+---------------------------------+---------------------+--------+41 rows in set (0.04 sec)校对规定字符集内用于字符比拟和排序的一套规定,以_ci完结的为大小写不敏感、_bin完结的为不辨别大小写。 ...

September 27, 2020 · 3 min · jiezi

关于mysql:记一次Mysql使用IN大数据量的优化

mysql版本号是5.7.28,表A有390W条记录,应用InnoDB引擎,其中varchar类型字段mac已建设索引,索引办法为B-tree。B表仅有5000+条记录。 有一条SQL指令是这样写的:SELECT * FROM A WHERE mac IN("aa:aa:aa:aa:aa:aa","bb:bb:bb:bb:bb:b",...此外省略900+条)通过查问进去的后果耗时294.428s。没错,将近5分钟。 应用EXPLAIN剖析下: 拜访类型type是range,且已命中索引,rows行也只有587776,可为什么查问耗时要这么久? mac的索引办法应用了B-tree,那比照下它与HASH的区别,简略地总结下:B-tree索引能够用于进行 =,>,>=,<,<=和between的计算,而HASH只能进行等值运算,不能进行范畴查找。那IN是等值运算,两种索引办法都实用。即然这样,把mac的索引办法批改为HASH,同样的查问耗时为。 既然调整索引办法并不能显著地晋升语句的查问性能,那只能从语句自身中进行解决。其实明眼人刚开始一看就晓得,SELECT * 是很耗性能的,那咱们只查业务上须要的字段,语句调整为:SELECT id,mileage FROM A WHERE mac IN("aa:aa:aa:aa:aa:aa","bb:bb:bb:bb:bb:b",...此外省略900+条)耗时并没有显著的晋升。 居然IN的形式这么难优化,是不是能够放弃应用LEFT JOIN呢?语句调整为:SELECT a.id,a.mileage FROM A a LEFT JOIN B b ON b.mac = a.mac WHERE b.create_time >= '2020-01-01'耗时超过5分钟,放弃。 咱们晓得,在条件量少的状况,EXISTS和IN的成果没有显示的差异。但条件多的时候,IN要比EXISTS的效率也高,来试下EXISTS:SELECT id,mileage FROM A a WHERE EXISTS(SELECT mac FROM B WHERE create_time >= '2020-01-01' AND mac = a.mac)耗时也是超过5分钟,IN的效率的确要比EXISTS高,放弃。 所以最初的论断是,如果IN后接大数据量的String,要谨慎。 在我的项目中我把mac作为惟一标识建设与id的对应表,在A表应用mac_id代替mac,查问的时候应用IN(1,2,3...)。效率会进步一些。以后应用NoSQL也是一种形式。

September 27, 2020 · 1 min · jiezi

关于mysql:windows-安装mysql多版本-主从复制

在windows7下装置mysql以下版本:1、mysql-5.7.282、mysql-8.0.20:主库3、mysql-8.0.20:从库一、mysql-5.7.28装置和启用1.1 下载安装免装置版本:https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.28-winx64.zip 装置版本:https://downloads.mysql.com/archives/community/ 我应用的是免装置版本,把文件解压进去如下门路:F:mysqlmysql-5.7.28-winx64 1.2 配置信息首先在F:mysqlmysql-5.7.28-winx64门路下新建my.ini文件,内容如下: [mysqld]# 设置服务端应用的字符集为utf-8character-set-server=utf8# 设置mysql的端口号port = 3306# 设置mysql的装置目录(能看到bin即可)basedir=F:\mysql\mysql-5.7.28-winx64# 设置mysql数据库的数据的寄存目录(即data文件夹,必须是空目录)datadir=F:\mysql\mysql-5.7.28-winx64\data# 容许最大连接数max_connections=2000# 创立新表时将应用的默认存储引擎default-storage-engine=INNODB# 设置mysql以及数据库的默认编码[mysql]default-character-set=utf8[mysql.server]default-character-set=utf8# 设置客户端默认字符集[client]port = 3306default-character-set=utf8留神:basedir和datadir的门路不要呈现中文和空格。 1.3 装置及初始化进入F:mysqlmysql-5.7.28-winx64bin,按住Shift+右键,抉择"在此处关上命令窗口",执行如下命令: mysqld install 呈现Service successfully installed.示意装置胜利。接下来继续执行mysqld --initialize --console 最初的=WsstAcIc4oh是数据库的初始化明码,记住它,前面须要用到它进行明码重置。 1.4 启动服务持续在CMD执行如下命令:net start mysql (net stop mysql 是进行服务,sc delete mysql是删除服务) 同样在bin目录下,执行mysqld -nt --install用来开机时主动启动此服务。 1.5 重置明码同样在bin目录下,执行: mysql -uroot -p而后输出初始密码。 进入mysql后,执行重置明码指令: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; 二、mysql-8.0.20装置和启用2.1 下载安装免装置版本:https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.20-winx64.zip 下载后解压到门路:F:mysqlmysql-8.0.20-winx64 2.2 配置信息首先在F:mysqlmysql-8.0.20-winx64门路下新建data文件夹和my.ini文件,内容如下: [mysqld]# 设置3307端口(原先的mysql5曾经占用3306)port=3307# 设置mysql的装置目录(你本人的目录)basedir=F:\mysql\mysql-8.0.20-winx64# 设置mysql数据库的数据的寄存目录datadir=F:\mysql\mysql-8.0.20-winx64\data# 容许最大连接数max_connections=200# 容许连贯失败的次数。max_connect_errors=10# 服务端应用的字符集默认为UTF8character-set-server=utf8# 创立新表时将应用的默认存储引擎default-storage-engine=INNODB# 默认应用“mysql_native_password”插件认证#mysql_native_passworddefault_authentication_plugin=mysql_native_password[mysql]# 设置mysql客户端默认字符集default-character-set=utf8[client]# 设置mysql客户端连贯服务端时默认应用的端口port=3307default-character-set=utf8留神:basedir和datadir的门路不要呈现中文和空格。 ...

September 27, 2020 · 1 min · jiezi

关于mysql:MySQL解决-ONLYFULLGROUPBY-错误的几个方法

原文链接:何晓东 博客 在 MySQL 5.7版本以上进行一些 ORDER BY 或者 GROUP BY 时,会呈现如下谬误 [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by, MySQL 的束缚是:你进行了 GROUP BY 和 ORDER BY,就须要保障你 SELECT 的列都在 GROUP BY 和 ORDER BY 中,然而理论需要并没有这样简略。  长期批改 ONLY_FULL_GROUP_BY 模式查问进去现有的模式 select @@global.sql_mode;去掉外面的 ONLY_FULL_GROUP_BY 模式,而后set 回去 set @@global.sql_mode = "查出来的值,去掉 ONLY_FULL_GROUP_BY" 批改配置文件中的 ONLY_FULL_GROUP_BY 模式找到 my.ini 文件,批改其中的 sql_mode 值 sql_mode="查出来的值,去掉 ONLY_FULL_GROUP_BY" 借助 and_value() 函数疏忽没有参加分组的列能够应用 ANY_VALUE() 援用未聚合的列,而无需禁用 ONLY_FULL_GROUP_BY 即可取得雷同的成果。 例如: mysql> SELECT name, MAX(age) FROM t;ERROR 1140 (42000): In aggregated query without GROUP BY, expression#1 of SELECT list contains nonaggregated column 'mydb.t.name'; thisis incompatible with sql_mode=only_full_group_by借助 ANY_VALUE() 改成这样就好了: SELECT ANY_VALUE(name), MAX(age) FROM t;参考链接: MySQL Handling of GROUP BY 最初恰饭 阿里云全系列产品/短信包特惠购买 中小企业上云最佳抉择 阿里云外部优惠券

September 25, 2020 · 1 min · jiezi

关于mysql:这次被坑惨了MySQL的隐式转换导致了一个线上BUG

某一天,开发问我,为什么针对一个查问会有两条记录,且其中一条记录并不符合条件select * from tablea where xxno = 170325171202362928;xxno为 170325171202362928 和 170325171202362930的都呈现在后果中。 一个等值查问为什么会有另外一个不同值的记录查问进去呢? 咱们一起来看看到底! 剖析咱们查看该表构造,发现xxno 为varchar 类型,然而等号左边是一个数值类型,这种状况下MySQL会如何进行解决呢?官网文档如下:https://dev.mysql.com/doc/ref... The following rules describe how conversion occurs for comparison operations: .... 省略一万字 .... In all other cases, the arguments are compared as floating-point (real) numbers.也就是说,他会将等于号的两边转换成浮点数来做比拟。 Comparisons that use floating-point numbers (or values that are converted to floating-point numbers) are approximate because such numbers are inexact. This might lead to results that appear inconsistent:如果比拟应用了浮点型,那么比拟会是近似的,将导致后果看起来不统一,也就是可能导致查问后果谬误。 ...

September 23, 2020 · 1 min · jiezi

关于mysql:第13期表统计信息的计算

本篇介绍 MySQL 表如何计算统计信息。表统计信息是数据库基于老本的优化器最重要的参考信息;统计信息不精确,优化器可能给出不够优化的执行打算或者是谬误的执行打算。 对统计信息的计算分为 非长久化统计信息(实时计算)与 长久化统计信息。 非长久化统计信息统计信息没有保留在磁盘上,而是频繁的实时计算统计信息;每次对表的拜访都会从新计算其统计信息;假如针对一张大表的频繁查问,那么每次都要从新计算统计信息,很消耗资源。 长久化统计信息把一张表在某一时刻的统计信息值保留在磁盘上;防止每次查问时从新计算;如果表更新不是很频繁,或者没有达到 MySQL 必须从新计算统计信息的临界值,可间接从磁盘上获取;即便 MySQL 服务重启,也能够疾速的获取统计信息值;统计信息的长久化能够针对全局设置也能够针对单表设置。接下来,具体说 MySQL 统计信息如何计算,何时计算,成果评估等问题。 在 MySQL Server 层来管制是否主动计算统计信息的散布,并且来决策是长久化还是非长久化。 一、长久化统计相干参数:innodb_stats_persistent :是否开启统计信息长久化,默认开启。innodb_stats_auto_recalc :是否主动从新计算长久化统计信息,默认开启。二、具体的更新策略为:当一张表数据变动超过 10% 后,MySQL 会针对这张表统计信息的更新工夫戳做一个判断,查看最初一次更新的工夫是否超过 10 秒; 如果不到 10 秒,把这张表加到一个统计信息更新队列中,到工夫了再从新计算;如果超过了10秒,间接从新计算,并且更新工夫戳。 目前这个超时工夫写死在 MySQL 代码里,临时不能更改。不过在某些 MySQL 分支版还能够管制这个工夫,比方 Percona。 innodb_stats_include_delete_marked : 更新长久化统计信息时,是否会计算曾经标记为删除的行。默认是敞开的,会获取未提交的脏数据。开启这个选项,MySQL计算统计信息时只会思考曾经提交的数据。 innodb_stats_persistent_sample_pages : 用于更新长久化索引散布或者其余统计信息的随机基数页,默认20个。页数越多,统计信息也就越精确,也就有助于查问优化器抉择最优的查问打算。 什么时候思考更改这个值呢?当查问打算不是很精确时。 比方比照指定表在零碎表mysql.innodb_index_stats 的数据跟 distinct 查问的后果,如果相差太大,能够思考减少这个值。当 analyze table 变的十分慢时,可能是这个值设置的太大了,此时要思考减小这个值。三、非长久化统计信息参数innodb_stats_transient_sample_pages:设置非长久化统计信息的采样页数目,默认8个。innodb_stats_on_metadata:当统计信息配置为非长久化时失效,默认敞开。参数 innodb_stats_persistent 为 0 或者建表时属性STATS_PERSISTENT=0 才起作用。 当开启后,对以下元数据的拜访会自动更新统计信息:show table statusshow indexinformation_schema.tablesinformation_schema.statistics所以开启这个选项会额定减少拜访表的开销,特地是大表。 还有一些其余的场景会自动更新非长久化统计信息,比方:表第一次被拜访;InnoDB 检测到有十六分之一的表自从上次统计信息计算后被更新了,这时触发自动更新;MySQL 客户端默认选项 --auto-rehash 关上所有 InnoDB 表,导致所有 InnoDB 表被自动更新统计信息;四、表属性管制STATS_AUTO_RECALC用来指定是否要主动计算指定 InnoDB 表的统计信息。 ...

September 23, 2020 · 2 min · jiezi

关于mysql:Mysql慢查询优化小记

1.背景当数据库中表的数据达到肯定级别后,就须要思考解决方案。事实上MySQL单表能够存储10亿级数据,只是这时候性能比拟差,业界公认MySQL单表容量在1KW以下是最佳状态,因为这时它的BTREE索引树高在3~5之间。既然一张表无奈搞定,那么就想方法将数据放到多个中央,目前比拟广泛的计划可能有下列几种: 归档分库分表NoSQL/NewSQL归档实用场景:最新的数据会被常常应用,旧数据很少被应用。 为什么不必NoSQL/NewSQL 首先,为什么不抉择第三种计划NoSQL/NewSQL,RDBMS次要有以下几个长处: RDBMS生态欠缺;RDBMS相对稳固;RDBMS的事务个性;NoSQL/NewSQL作为新生儿,在咱们把可靠性当做首要考查对象时,它是无奈与RDBMS等量齐观的。RDBMS倒退几十年,只有有软件的中央,它都是外围存储的首选。目前绝大部分公司的外围数据都是:**以RDBMS存储为主,NoSQL/NewSQL存储为辅**!目前互联网行业解决海量数据的通用办法:**分库分表**。2.支流数据库中间件设计方案

September 22, 2020 · 1 min · jiezi

关于mysql:从全备中恢复单库或单表小心有坑

前言: MySQL 逻辑备份工具最罕用的就是 mysqldump 了,个别咱们都是备份整个实例或局部业务库。不分明你有没有做过复原,复原场景可能就比拟多了,比方我想复原某个库或某个表等。那么如何从全备中复原单库或单表,这其中又有哪些暗藏的坑呢?这篇文章咱们一起来看下。 1.如何复原单库或单表后面文章有介绍过 MySQL 的备份与复原。可能咱们每个数据库实例中都不止一个库,个别备份都是备份整个实例,但复原需要又是多种多样的,比如说我想只复原某个库或某张表,这个时候应该怎么操作呢? 如果你的实例数据量不大,能够在另外一个环境复原出整个实例,而后再独自备份出所需库或表用来复原。不过这种办法不够灵便,并且只实用数据量比拟少的状况。 其实从全备中复原单库还是比拟不便的,有个 --one-database 参数能够指定单库复原,上面来具体演示下: # 查看及备份所有库mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sbtest || sys || testdb || testdb2 |+--------------------+mysqldump -uroot -pxxxx -R -E --single-transaction --all-databases > all_db.sql# 删除testdb库 并进行单库复原mysql> drop database testdb;Query OK, 36 rows affected (2.06 sec)# 貌似复原前 testdb库不存在的话要手动新建mysql -uroot -pxxxx --one-database testdb < all_db.sql除了上述办法外,复原单库或单表还能够采纳手动筛选的办法。这个时候 Linux 下赫赫有名的 sed 和 grep 命令就派上用场了,咱们能够利用这两个命令从全备中筛选出单库或单表的语句,筛选办法如下: # 从全备中复原单库sed -n '/^-- Current Database: `testdb`/,/^-- Current Database: `/p' all_db.sql > testdb.sql# 筛选出单表语句cat all_db.sql | sed -e '/./{H;$!d;}' -e 'x;/CREATE TABLE `test_tb`/!d;q' > /tmp/test_tb_info.sql cat all_db.sql | grep --ignore-case 'insert into `test_tb`' > /tmp/test_tb_data.sql2.小心有坑对于上述手动筛选来复原单库或单表的办法,看起来简略不便,其实暗藏着一个小坑,上面咱们来具体演示下: ...

September 22, 2020 · 4 min · jiezi

关于mysql:MySQL的数据表操作

MySQL的数据表操作数据表操作每一张数据表都相当于一个文件,在数据表中又分为表构造与表记录。 表构造:包含存储引擎,字段,主外键类型,约束性条件,字符编码等表记录:数据表中的每一行数据(不蕴含字段行) idnamegenderage1Alicefemale182Bobmale173Carolmale16创立数据表创立数据表其实大有考究,它包含表名称,表字段,存储引擎,主外键类型,约束性条件,字符编码等。 如果InnoDB数据表没有创立主键,那么MySQL会主动创立一个以行号为准的暗藏主键。 #语法: []为可选create table 表名(字段名1 类型[(宽度) 约束条件],字段名2 类型[(宽度) 约束条件],字段名3 类型[(宽度) 约束条件]) [chrset="字符编码"];#留神:1. 在同一张表中,字段名是不能雷同2. 宽度和约束条件可选3. 字段名和类型是必须的4. 表中最初一个字段不要加逗号以下示例将演示在school数据库中创立student数据表。 mysql> use school;Database changedmysql> create table student( -> name varchar(32), -> gender enum("male", "female"), -> age smallint -> );Query OK, 0 rows affected (0.18 sec)也能够不进入数据库在内部或另外的库中进行创立,那么创立时就应该指定数据库。 create table 数据库名.新建的数据表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件] );查看数据表在某一数据库中应用show tables;可查看该库下的所有数据表。 应用show create table 表名;可查看该表的创立信息。 应用desc 表名;可查看该表的表构造,包含字段,类型,约束条件等信息。 mysql> show tables; # 查看以后库下所有表名+------------------+| Tables_in_school |+------------------+| student |+------------------+1 row in set (0.01 sec)mysql> show create table student; # 查看student表的创立信息+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| Table | Create Table |+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| student | CREATE TABLE `student` ( `name` varchar(32) DEFAULT NULL, `gender` enum('male','female') DEFAULT NULL, `age` smallint DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 |+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+1 row in set (0.05 sec)mysql> show create table student \G; # 应用\G可将其转换为一行显示*************************** 1. row *************************** Table: studentCreate Table: CREATE TABLE `student` ( `name` varchar(32) DEFAULT NULL, `gender` enum('male','female') DEFAULT NULL, `age` smallint DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)ERROR:No query specifiedmysql> desc student; # 查看表构造+--------+-----------------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+--------+-----------------------+------+-----+---------+-------+| name | varchar(32) | YES | | NULL | || gender | enum('male','female') | YES | | NULL | || age | smallint | YES | | NULL | |+--------+-----------------------+------+-----+---------+-------+3 rows in set (0.00 sec)批改表名字应用alter table 旧表名 rename 新表名;可批改表名 ...

September 22, 2020 · 5 min · jiezi

关于mysql:MySQL的数据库操作

MySQL的数据库操作查看数据库应用show databases;可查看所有的数据库。 mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sys |+--------------------+4 rows in set (0.03 sec)应用show create database 数据库名;可查看某一数据库的创立信息。 mysql> show create database mysql;+----------+---------------------------------------------------------------------------------------------------------------------------------+| Database | Create Database |+----------+---------------------------------------------------------------------------------------------------------------------------------+| mysql | CREATE DATABASE `mysql` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |+----------+---------------------------------------------------------------------------------------------------------------------------------+1 row in set (0.01 sec)应用select database();可查看以后所在的数据库。 mysql> select database();+------------+| database() |+------------+| mysql |+------------+1 row in set (0.00 sec)应用show variables like 'character%';可查看数据库编码集。 ...

September 22, 2020 · 2 min · jiezi

关于mysql:Mysql常用基础语句2

子查问练习db40 列出薪资比'王海涛'的薪资高的所有员工,显示姓名、薪资select name,sal from emp where sal>(select sal from emp where name="王海涛");列出与'刘沛霞'从事雷同职位的所有员工,显示姓名、职位。select name,job from emp where job=(select job from emp where name="刘沛霞");列出薪资比'大数据部'部门(已知部门编号为30)所有员工薪资都高的员工信息,显示员工姓名、薪资和部门名称。select e.name,e.sal,d.name from emp e join dept d on sal>(select MAX(sal) from emp where dept_id=30);加上没有部门的员工select e.name,e.sal,d.name from emp e left join dept d on e.dept_id=d.id where sal>(select MAX(sal) from emp where dept_id=30);多表查问练习.列出在'培优部'任职的员工,假设不晓得'培优部'的部门编号,显示部门名称,员工名称。select d.name,e.name from dept d join emp e on d.name="培优部" where d.id=e.dept_id;(自查问)列出所有员工及其间接下级,显示员工姓名、下级编号,下级姓名 select c.name,c.id,c.topid,p.name,p.id from emp c join emp p on c.topid=p.id; 列出最低薪资大于1500的各种职位,显示职位和该职位的最低薪资select job,min(sal) from emp group by job having min(sal)>1500; // 补充where和having的区别 // 1.都能过滤2.where是在分组之前对数据过滤;having是在分组之后对数据过滤3.where不能和聚合函数一起应用,不能和order\group应用列出在每个部门就任的员工数量、平均工资。显示部门编号、员工数量,均匀薪资。select count(*),avg(sal),dept_id from emp group by dept_id;查出至多有一个员工的部门,显示部门编号、部门名称、部门地位、部门人数。select e.dept_id,d.name,d.loc,count(*) from emp e join dept d on e.dept_id=d.id group by dept_id having count(*)>0;列出受雇日期早于间接下级的所有员工,显示员工编号、员工姓名、部门名称。select c.id,c.name,c.dept_id,d.name dept_name from emp c,emp p, dept d where c.topid=p.id and c.dept_id=d.id and c.hdate<p.hdate;查问员工表中薪资最高的员工信息 select * from emp order by sal desc limit 0,1;

September 21, 2020 · 1 min · jiezi

关于mysql:分布式数据库拆分常用之法

摘要:本文介绍做数据库切分的两种思路,艰深了解就是:「垂直拆分」等于“列”变“行”不变,「程度拆分」等于“行”变“列”不变。分布式系统做「伸缩性」最重要的就是先做好「无状态」,如此才能够得心应手的进行横向“扩大”,而不必放心在多个正本之间切换会产生错乱。 《分布式系统关注点——「无状态」详解》聊的就是这个。 不过,就算做好了横向扩大,实质上还是一个“大程序”,只是变得「可复制」了而已。 如果要毁灭“大程序”,那就得“切分”,做好切分必然离不开「高内聚低耦合」的核心思想。《分布式系统关注点——「高内聚低耦合」详解》这篇聊的就是这个。 题外话:当你遇到单点单利用撑持不住应用的时候,Z哥给你的普适性倡议是:先思考“扩”,再思考“切”。这个和写代码一样,“减少”新性能往往比在老性能上改容易。 “扩”的话先思考「垂直扩」(加硬件,钱能解决的都不是问题),再思考「程度扩」(无状态革新+多节点部署,这是小手术)。 “切”的话个别就是「垂直切」(依据业务切分,这是大手术),偶然会用到「程度切」(其实就是单个利用里的分层,比方前后端拆散)。 第三篇《分布式系统关注点——弹性架构》咱们聊了常见的两种「松耦合」架构模式,为的是让应用程序的「伸缩性」更上一层楼。 以上这些呢都是应用程序层面的工作。个别状况下,在应用程序层面做做手术,再配合以缓存的充分运用,就能够撑持零碎倒退很长时间了。特地是数据量不大,只是申请量大的「CPU密集型」场景。 然而,如果所处的工作场景是一个十分成熟且具备肯定规模的我的项目,越倒退到前面瓶颈总是呈现在数据库这里。甚至会呈现cpu长期高负荷、宕机等景象。 在如此场景下,就不得不对数据库开刀了。这次Z哥就来和你聊聊做数据库的「伸缩性」有哪些好办法。外围诉求 面临数据库须要开刀的时候,整个零碎往往曾经长成这个样子了。 正如后面所说,这时候的瓶颈往往会体现在「CPU」上。 因为对数据库来说,硬盘和内存的扩容绝对容易,因为它们都能够间接用“减少”的形式进行。 CPU就不同了,一旦CPU飙高,最多查看下索引有没有做好,完了之后根本就只能干看着。 所以解决这个问题的思路天然就变成了:如何将一个数据库的CPU压力摊派到多个CPU下来。甚至能够做到按需随时减少。 那这不就是和应用程序一样做「切分」嘛。也是分布式系统的「分治」思维体现。 既然是切分,实质上就和应用程序一样,也分为「垂直切分」和「程度切分」。 垂直切分垂直切分有时候也会被称作「纵向切分」。 同应用程序一样,它是以「业务」为维度的切分形式,在不同的数据库服务器上跑不同业务的数据库,各司其职。 个别状况下,Z哥倡议你优先思考「垂直切分」而不是「程度切分」,为什么呢?你能够随便关上手头我的项目中的SQL语句看看,我想必然存在着大量的「join」和「transaction」关键字,这种关联查问和事务操作,实质上是一种「关系绑定」,一旦面临数据库拆分之后,就没法玩了。 此时你只有2个抉择。 要么将不必要的「关系*」逻辑舍弃掉,这须要在业务上作出调整,去除不必要的“批量操作”业务,或者去除不必要的强一致性事务。不过你也晓得,必定有一些场景是去不完的。要么将「合并」,「关联」等逻辑上浮,体现到业务逻辑层甚至是应用层的代码中。最终,不管怎么抉择,改变起来都是一个大工程。 为了让这个工程尽可能的动作小一些,谋求更好的性价比,须要保持一个准则——“防止拆分严密关联的表”。 因为两个表之间关联越严密,意味着对「join」和「transaction」的需要越多,所以保持这个准则能够使得雷同的模块,严密相干的业务都落在同一个库中,这样它们能够持续应用「join」和「transaction」来工作。 因而,咱们该当优先采纳「垂直切分」的形式。 做「垂直切分」思路很简略,个别状况下,倡议是与切分后的应用程序一一对应就好,不必多也不必少。 理论工作中,要做好「垂直切分」次要体现在「业务」的相熟度上,所以这里就不持续开展了。 「垂直切分」的长处是: 高内聚,拆分规定清晰。相比「程度切分」数据冗余度更低。与应用程序是1:1的关系,不便保护和定位问题。一旦某个数据库中发现异常数据,排查这个数据库的关联程序就行了。然而这并不是一个「一劳永逸」的计划,因为没人能预料到将来业务会倒退的怎么样,所以最显著的毛病就是:对于拜访极其频繁或者数据量超大的表依然存在性能瓶颈。 的确须要解决这个问题的话,就须要搬出「程度切分」了。 题外话:不到迫不得己,尽量避免进行「程度切分」。看完接下去的内容你就晓得起因了。上面Z哥就给你好好聊聊「程度切分」,这才是本文的重点。程度切分 设想一下,在你做了「垂直切分」之后,还是在某个数据库中发现了一张数据量超过10亿条的表。 这个时候要对这个表做「程度切分」,你会怎么思考这个事件? Z哥教给你的思路是: 先找到“最高频“的「读」字段。再看这个字段的理论应用中有什么特点(批量查问多还是单个查问多,是否同时是其它表的关联字段等等)。再依据这个特点抉择适合的切分计划。为什么要先找到高频的「读」字段呢? 因为在理论的应用中,「读」操作往往是远大于「写」操作的。个别进行「写」之前都得通过「读」来做后行校验,然而「读」还有本人独自的应用场景。所以针对更高频的「读」场景去思考,产生的价值必然也更大。 比方,当初那张10亿数据量的表是一张订单表,构造是这样: order (orderId long, createTime datetime, userId long)上面咱们先来看看有哪几种「程度切分」的形式,完了能力明确什么样的场景适宜哪种形式。 范畴切分 这是一种「连续式」的切分形式。 比方依据工夫(createTime)切分的话,咱们能够按年月来分,order_201901一个库,order_201902一个库,以此类推。 依据程序数(orderId)切分的话,能够100000~199999一个库,200000~299999一个库,以此类推。 这种切分法的长处是:单个表的大小可控,扩大的时候无需数据迁徙。 毛病也很显著,一般来说工夫越近或者序号越大的数据越“新”,因而被拜访的频率和概率相比“老”数据更多。会导致压力次要集中在新的库中,而历史越久的库,越闲暇。 Hash切分与「范畴切分」正好相同,这是一种「离散式」的切分形式。 它的长处就是解决了「范畴切分」的毛病,新数据被扩散到了各个节点中,防止了压力集中在多数节点上。 同样,毛病与「范畴切分」的长处相同,一旦进行二次扩大,必然会波及到数据迁徙。因为Hash算法是固定的,算法一变,数据分布就变了。 大多数状况下,咱们的hash算法能够通过简略的「取模」运算来进行即可。就像上面这样: 如果分成11个库的话,公式就是 orderId % 10。 100000 % 10 = 0,调配到db0。100001 % 10 = 1,调配到db1。....100010 % 10 = 0,调配到db0。100011 % 10 = 1,调配到db1。 ...

September 21, 2020 · 1 min · jiezi

关于mysql:轻量级binlog同步工具包binlogportal

应用binlog的起因近期须要重构一个老零碎,须要从几个服务中实时同步订单的批改到重构表里。 这里就面临两个抉择, 在每个服务的mysql操作前埋点,发送批改信息到队列或服务上。这种计划须要批改多个服务的代码并且测试对原零碎的影响,有额定开发和测试老本。同步mysql的binlog,依据表的insert和update更新新表。然而须要保护一个binlog同步的服务本次抉择了binlog同步的形式。搭建的binlog服务也能够用在之后新零碎的缓存更新和同步ES索引上,绝对于埋点这种只有一次性作用的形式,性价比较高。 工具调研:canal和mysql-binlog-connector-java1.canal要实现binlog同步服务,应用较多的开源计划是canal,运行比较稳定,而且性能也很丰盛。 然而在理论部署服务的时候,遇到了一些问题: canal采纳了client-server的模式,至多须要部署两个集群。咱们的我的项目都是应用公有云部署,为了稳固运行,就有额定的资源和保护开销。 起初发现canal server能够投递信息到kafka。然而咱们的音讯队列是自研的,只能尝试去改源码。canal的server是残缺独立的包,无奈间接用springboot嵌套。而咱们的根底组件都依赖于springboot,比方监控,配置核心等。canal的HA部署应用的是zookeeper,很惋惜咱们并没有可用的zookeper集群,也没有资源重新部署一个。单机部署的时候,曾经解决的binlog postion是保留在文件外面的,咱们用的公有云docker,重启后全失落。2.mysql-binlog-connector-java调研同时也发现了另一个binlog同步工具,mysql-binlog-connector-java。 这是一个开源的binlog同步工具,性能很简略,就是接管binlog信息。作为一个依赖jar能够很容易在springboot中应用。 然而没有对binlog的内容做格式化解决,应用很不不便。当然更没有保存信息和分布式部署性能。 自研工具包binlogportal基于这些问题,咱们须要一个具备以下个性的binlog同步工具: 能够应用springboot加载运行,具备较好的扩展性 说白了就是作为一个jar包,凋谢出接口能够自定义解决binlog信息的形式能够应用redis实现binlog position的保留和分布式部署为了满足这些条件,通过对mysql-binlog-connector-java封装后,实现了自研的工具binlogportal。 提供了binlogportal-spring-boot-starter包,可应用spring boot疾速部署应用redis保留binlog position信息,重启后可从上次position地位开始以后反对insert和update的结构化提供默认的http事件处理器。可通过实现IEventHandler接口,自定义事件处理器应用redis作为分布式协调器,可多机部署实现高可用应用阐明Mysql配置Mysql须要开启binlog并设置为row模式同步binlog应用的mysql账号,须要增加REPLICATION权限,示例如下:CREATE USER binlogportal IDENTIFIED BY '123456';GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'binlogportal'@'%';GRANT ALL PRIVILEGES ON *.* TO 'binlogportal'@'%';FLUSH PRIVILEGES;通过spring boot构建我的项目间接依赖binlogportal-spring-boot-starter<dependency> <groupId>com.insistingon.binlogportal</groupId> <artifactId>binlogportal-spring-boot-starter</artifactId> <version>1.0.5</version></dependency>通过spring boot的application.yml配置启动器binlogportal: enable: true # 是否启用autoconfig distributed-enable: true # 是否启用分布式部署 distributed-redis: # distributed-enable为true时,要提供一个redis作为分布式协调器 host: 127.0.0.1 port: 6379 auth: position-redis: # 保留binlog position的redis,必须配置 host: 127.0.0.1 port: 6379 auth: db-config: # 数据库配置,能够有多个,key自定义即可 d1: host: 0.0.0.0 port: 3306 user-name: binlogportal password: 123456 handler-list: [logEventHandler] # 该数据库应用的事件处理器,名称为spring的bean name http-handler: # 启用自带的http事件处理器,可发送申请 url-list: [http://127.0.0.1:8988/testit] # 要发送的url列表,http参数为对立的格局 result-callback: httpCallBack # 配置自定义的后果处理器,须要实现IHttpCallback接口,值为bean nameStarter启动 ...

September 20, 2020 · 1 min · jiezi

关于mysql:MySQL数据库表各种大小限制小结

本文所有条目总结均来自mysql5.6的官网英文文档: table-size-limit 1. MySQL表的列数限度1.1 MySQL硬性限度每个表最大4096个列1.2 InnoDB存储引擎的束缚: 每个表最大1017个列;2. MySQL表的每行数据的限度2.1 MySQL表限度row size最大 65535个字节2.2 InnoDB限度row size最大半页, 默认页大小16K, 也就是 row size < 8K;3. MySQL表总数据量的限度3.1 一个表的总大小限度取决于操作系统的文件限度1) windows fat32的话, 最大就是4G如果要想超过4G, 在64位windows上应用NTFS ;2) 其余的windows上的文件数的限度等在Windows上,表空间文件的门路(包含文件名)不能超过MAX_PATH限度。在Windows 10之前,MAX_PATH的限度是260个字符。从Windows 10 1607版本开始,常见的Win32文件和目录函数中删除了MAX_PATH限度,然而必须启用新的行为。 3.2 默认MyISAM数据和索引文件最大到256TB,但此限度可改为最大65536TB3.3 InnoDB的表大小限度:64T(取决于页大小, 详见下5)4. MySQL数据库的表个数:无限度(InnoDB容许40亿个表)MySQL对表的数量没有限度。 底层文件系统可能对示意表的文件数量有限度。 单个存储引擎可能会施加特定于引擎的束缚: InnoDB容许多达40亿个表 5. 综上-总结InnoDB的限度5.1 MySQL5.6当前容许InnoDB表最多1017个列5.2 一个InnoDB表最多容许64个二级索引5.3 默认索引前缀长度最多767bytes5.4 联结索引最多容许16个列, 多了报错5.5 InnoDB的最大行大小为半页(小于8K-默认)因为默认页大小为16K, 要求是小于half page size, 就是小于8K; innodb_page_size能够通过这个批改为4K, 8K; 这样的话, rowsize 就限度为小于 2K, 4K了; 尽管InnoDB外部反对大于65,535字节的行大小,但MySQL自身对所有列的合并大小施加了65,535的行大小限度。-?跨页?另设置?5.6 innoDB日志文件的最大组合大小是512G5.7 InnoDB表空间大小限度64T(表空间最大大小也是表的最大大小)最小表空间大小略大于10MB 最大表空间大小取决于InnoDB的页面大小: InnoDB Page SizeMaximum Tablespace Size4KB16TB8KB32TB16KB64TB参考1: Limits on Table Column Count and Row Size ...

September 19, 2020 · 1 min · jiezi

关于mysql:MySQL第03篇SQL进阶

外围概述:在上一篇,咱们学会了应用SQL实现对数据库的基本操作,本篇咱们将持续进阶学习SQL,其中有多表操作、数据库设计规范、事务、子查问、数据库的备份与还原及DCL等。 第一章:表与表之间的关系1.1-概述(理解)现实生活中,实体与实体之间必定是有关系的,比方:老公和老婆,部门和员工,老师和学生等。那么咱们 在设计表的时候,就应该体现出表与表之间的这种关系! 表与表之间的三种关系 一对多:最罕用的关系 部门和员工多对多:学生选课表 和 学生表, 一门课程能够有多个学生抉择,一个学生抉择多门课程一对一:绝对应用比拟少。员工表 简历表, 公民表 护照表1.2-一对多(重点)一对多(1:n) 例如:班级和学生,部门和员工,客户和订单,分类和商品 一对多建表准则: 在从表(多方)创立一个字段,字段作为外键指向主表(一方)的主键 。 1.3-多对多(重点)多对多(m:n) 例如:老师和学生,学生和课程,用户和角色 多对多关系建表准则: 须要创立第三张表,两头表中至多两个字段,这两个字段别离作为外键指向各自一方的 主键。 1.4-一对一(理解)一对一(1:1) 在理论的开发中利用不多.因为一对一能够创立成一张表。 两种建表准则: 外键惟一 :主表的主键和从表的外键(惟一),造成主外键关系,外键惟一 UNIQUE外键是主键 :主表的主键和从表的主键,造成主外键关系 1.5-一对多案例(重点)需要:一个游览线路分类中有多个游览线路 界面 表与表的关系 演示-- 创立游览线路分类表 tab_category-- cid 游览线路分类主键,主动增长-- cname 游览线路分类名称非空,惟一,字符串 100create table tab_category ( cid int primary key auto_increment, cname varchar(100) not null unique)-- 增加游览线路分类数据:insert into tab_category (cname) values ('周边游'), ('出境游'), ('国内游'), ('港澳游');select * from tab_category;-- 创立游览线路表 tab_route/*rid 游览线路主键,主动增长rname 游览线路名称非空,惟一,字符串 100price 价格rdate 上架工夫,日期类型cid 外键,所属分类*/create table tab_route( rid int primary key auto_increment, rname varchar(100) not null unique, price double, rdate date, cid int, foreign key (cid) references tab_category(cid))-- 增加游览线路数据INSERT INTO tab_route VALUES(NULL, '【厦门+鼓浪屿+南普陀寺+曾厝垵 高铁 3 天 惠贵团】尝味友鸭面线 住 1 晚鼓浪屿', 1499,'2018-01-27', 1),(NULL, '【浪漫桂林 阳朔西街高铁 3 天纯玩 高级团】城徽象鼻山 兴坪漓江 西山公园', 699, '2018-02-22', 3),(NULL, '【爆款¥1699 秒杀】泰国 曼谷 芭堤雅 金沙岛 杜拉拉水上市场 双飞六天【含送签费 泰风情 广州往返 特价团】', 1699, '2018-01-27', 2),23 / 26(NULL, '【经典•狮航 ¥2399 秒杀】巴厘岛双飞五天 抵玩【广州往返 特价团】', 2399, '2017-12-23',2),(NULL, '香港迪士尼乐园自在行 2 天【永东跨境巴士广东至迪士尼去程交通+迪士尼一日门票+香港如心海景酒店暨会议核心规范房 1 晚住宿】', 799, '2018-04-10', 4);1.6-多对多案例(重点)案例形容一个用户珍藏多个线路,一个线路被多个用户珍藏 。 ...

September 19, 2020 · 8 min · jiezi

关于mysql:MySQL-SELECT-list-is-not-inMySQL关闭严格模式

SELECT list is not inGROUP BY clause and contains nonaggregated columnMySQL严格模式次要用以下场景 不反对对not null字段插入null值不反对对自增长字段插入”值不反对text字段有默认值咱们用不到时能够敞开它,在Laravel中能够编辑database.php,敞开严格模式,不应用框架时,能够编辑my.ini在[mysqld]加一行 [mysqld]sql-mode=""重启MySQL,就敞开了

September 19, 2020 · 1 min · jiezi

关于mysql:mysql创建12个月的日期视图

创立往年的12个月的视图:CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`%` SQL SECURITY DEFINERVIEW `year_month_view` ASSELECT CONCAT(DATE_FORMAT((CURDATE()), '%Y'),'-01') AS date UNIONSELECT CONCAT(DATE_FORMAT((CURDATE()), '%Y'),'-02') AS date UNIONSELECT CONCAT(DATE_FORMAT((CURDATE()), '%Y'),'-03') AS date UNIONSELECT CONCAT(DATE_FORMAT((CURDATE()), '%Y'),'-04') AS date UNIONSELECT CONCAT(DATE_FORMAT((CURDATE()), '%Y'),'-05') AS date UNIONSELECT CONCAT(DATE_FORMAT((CURDATE()), '%Y'),'-06') AS date UNIONSELECT CONCAT(DATE_FORMAT((CURDATE()), '%Y'),'-07') AS date UNIONSELECT CONCAT(DATE_FORMAT((CURDATE()), '%Y'),'-08') AS date UNIONSELECT CONCAT(DATE_FORMAT((CURDATE()), '%Y'),'-09') AS date UNIONSELECT CONCAT(DATE_FORMAT((CURDATE()), '%Y'),'-10') AS date UNIONSELECT CONCAT(DATE_FORMAT((CURDATE()), '%Y'),'-11') AS date UNIONSELECT CONCAT(DATE_FORMAT((CURDATE()), '%Y'),'-12') AS date 创立以后月前12个月的视图:CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`%` SQL SECURITY DEFINERVIEW `year_month_view` AS SELECT DATE_FORMAT(CURDATE(), '%Y-%m') AS `year_month` UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 1 MONTH), '%Y-%m') AS `year_month` UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 2 MONTH), '%Y-%m') AS `year_month` UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 3 MONTH), '%Y-%m') AS `year_month` UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 4 MONTH), '%Y-%m') AS `year_month` UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 5 MONTH), '%Y-%m') AS `year_month` UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 6 MONTH), '%Y-%m') AS `year_month` UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 7 MONTH), '%Y-%m') AS `year_month` UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 8 MONTH), '%Y-%m') AS `year_month` UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 9 MONTH), '%Y-%m') AS `year_month` UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 10 MONTH), '%Y-%m') AS `year_month` UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 11 MONTH), '%Y-%m') AS `year_month`

September 18, 2020 · 1 min · jiezi

关于mysql:MySQL第02篇SQL基本操作

外围概述:在开发中,咱们应用SQL语句命令来操作数据库及数据库中的数据,常见的操作有数据库及表的增删改查等,本篇咱们将先去学习应用SQL语句实现数据库及表的基本操作。 第一章:意识SQL1.1-什么是SQL(理解)Structured Query Language 结构化查问语言,是一种操作数据库的命令标准。 1.2-SQL的作用(理解)是一种所有关系型数据库的查问标准,不同的数据库都反对。通用的数据库操作语言,能够用在不同的数据库中。不同的数据库 SQL 语句有一些区别 1.3-SQL语句分类(理解)Data Definition Language (DDL 数据定义语言) 如:建库,建表Data Manipulation Language(DML 数据操纵语言),如:对表中的记录操作增删改Data Query Language(DQL 数据查询语言),如:对表中的查问操作Data Control Language(DCL 数据管制语言),如:对用户权限的设置1.4-SQL语法注意事项(理解)1:每条语句以分号结尾,如果在 SQLyog 中不是必须加的。 2:SQL 中不辨别大小写,关键字中认为大写和小写是一样的 。 3:有3 种正文: 正文语法阐明--空格单行正文/**/多行正文#这是 mysql 特有的正文形式第二章:DDL操作数据库2.1-创立数据库(重点)创立数据CREATE DATABASE 数据库名; 判断数据库是否曾经存在,不存在则创立数据库CREATE DATABASE IF NOT EXISTS 数据库名; 创立数据库并指定字符集CREATE DATABASE 数据库名 CHARACTER SET 字符集;演示:--创立一个名为db1的数据库create database db1;--若没有存在,则创立一个名为db2的数据库create database if not exists db2;--创立要给字符集为gbk的数据库db3create database db3 character set gbk;2.2-查看数据库(重点)查看所有数据库show databases;查看指定的数据库show create database 数据库名演示:--查看所有数据库show databases;--查看名为db1的数据库show create database db1;2.3-批改数据库(重点)批改数据库的字符集ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;演示:ALTER DATABASE db1 character set utf8;2.4-删除数据库(重点)语法DROP DATABASE 数据库名;演示:DROP DATABASE db1;2.5-应用数据库(重点)查看应用的数据库SELECT DATABASE();切换应用的数据库use 数据库名;演示select database();第三章:DDL操作表构造前提先应用某个数据库 。 ...

September 18, 2020 · 9 min · jiezi

关于mysql:MySQL的账户设置

MySQL的账户设置应用 docker 装置 MySQL 并疾速启动,当初咱们进入docker容器。 ➜ ~ docker exec -it mysql8 /bin/bashroot@dedd71769326:/#MySQL数据库连贯MySQL命令语法 用户名是你登录的用户,主机名或者IP地址为可选项,如果是本地连接则不须要设置,近程连贯服务端则须要填写,明码是对应用户的明码。 mysql –u用户名 [–h主机名或者IP地址,-P端口号] –p明码-u:登录的用户名。-h:近程主机名或IP地址,不填写则默认本地地址。-P:MySQL端口号,默认为3306。-p:该登录用户对应的登录明码。root@dedd71769326:/# mysql -u root -pEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 9Server version: 8.0.21 MySQL Community Server - GPLCopyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MySQL账户查看因为 root 权限很高,所以个别我的项目上会调配不同的账户和权限供程序员操作。 ...

September 18, 2020 · 8 min · jiezi

关于mysql:MYSQL事务详解

学习一个货色,还是先从其概念开始,第一个问题:首先先看看什么是事务? 数据库事务是拜访并可能操作各种数据项的一个数据库操作序列,这些操作要么全副执行,要么全副不执行。 从这个概念看,事务就是一组SQL,而且这组SQL要么全副执行,要么全副不执行。 那么第二个常见的问题,事务有哪些个性(点)呢?这是一个很常见的考题。 事务的四大个性:A(Atomicity)C(Consistency)I(Isolation)D(Durability),如何了解这四个个性呢? 1.原子性(Atomicity):事务开始后的所有操作,要么全副做完,要么全副不做,不可能做一半的状况,如果事务执行过程中出错,会回滚到事务开始前的状态,也就是事务是一个不可分割的整体。 2.一致性(Consistency):事务开始前和完结后,数据库的完整性束缚没有被毁坏。比方A向B转账,A扣了钱,B就肯定会收到,不存在A这边减了,B那边没有加的状况。 3.隔离性(Isolation):同时产生的事务(并发事务)不应该导致数据库处于不统一的状态中。零碎中每个事务都应该像惟一事务一样执行。任何事务都不应该影响其余事务的存在。如果A向B转账的同时,A齐全转移所有的钱,两个事务应该独立进行,在进行转账前要确认好余额。对于隔离性,前面会具体介绍。 4.持久性(Durability)事务实现后,事务对数据库的所有更新将被保留到数据库(磁盘),不能回滚,也能够了解为:无论db或零碎是否故障,数据都会永恒保留在磁盘上,不会丢。 那Mysql是否反对事务,Mysql有多种存储引擎,包含MyISAM, Innodb, Memory, Merge等。这其中,Innodb和BDB是反对事务的,MyISAM不反对事务。 Mysql如何执行事务呢?1.启动事务 mysql> start transaction;或者mysql> begin;2.执行你心愿在事务中运行的sql语句3.执行commit语句,实现事务并提交数据 示例,假如有一张表student: MySQL [test]> select * from student;+----+----------+-----+| id | name | age |+----+----------+-----+| 1 | clark | 30 || 2 | zhangsan | 28 || 3 | lisi | 28 |+----+----------+-----+咱们来执行一个事务,将zhangsan的年龄改成22,具体语句如下: #会话(事务)1MySQL [test]> begin;Query OK, 0 rows affected (0.01 sec)MySQL [test]> MySQL [test]> MySQL [test]> MySQL [test]> MySQL [test]> update student set age = 22 where id = 2;Query OK, 1 row affected (0.01 sec)Rows matched: 1 Changed: 1 Warnings: 0MySQL [test]> select * from student;+----+----------+-----+| id | name | age |+----+----------+-----+| 1 | clark | 30 || 2 | zhangsan | 22 || 3 | lisi | 28 |+----+----------+-----+3 rows in set (0.01 sec)此时咱们在会话1中没有执行commit,而后咱们在另一个会话窗口2查问下id=2的学生记录,年龄依然是28(只管在以后事务会话(会话1)中能查到最新数据22),因为前一个会话并没有commit(Mysql默认的事务隔离级别是可反复读),所以咱们读的依然是事务执行完之前的数据。 ...

September 18, 2020 · 5 min · jiezi

关于mysql:个人学习系列-防止MySQL重复插入数据

在MySQL进行数据插入操作时,总是会思考是否会插入反复数据,之前的操作都是先依据主键或者惟一约束条件进行查问,有就进行更新没有就进行插入。代码重复效率低下。新建表格CREATE TABLE `person` ( `id` int NOT NULL COMMENT '主键', `name` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '姓名', `age` int NULL DEFAULT NULL COMMENT '年龄', `address` varchar(512) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '地址', PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;增加三条数据如下: 咱们这边能够依据插入方式进行躲避: 1. insert ignoreinsert ignore 会主动疏忽数据库曾经存在的数据(依据主键或者惟一索引判断),如果没有数据就插入数据,如果有数据就跳过插入这条数据。 插入SQL如下:insert ignore into person (id,name,age,address) values(3,'那谁',23,'甘肃省'),(4,'我的天',25,'浙江省');再次查看数据库就会发现仅插入id为4的数据,因为数据库中存在id为3的数据所以被疏忽。 ...

September 17, 2020 · 1 min · jiezi

关于mysql:docker安装mysql自动备份

前几天服务器被黑了,被勒索比特币。交又交不起只能本人做好备份。创立数据库 创立用户并受权近程拜访 备份脚本 增加到定时工作搞定!

September 17, 2020 · 1 min · jiezi

关于mysql:Mysql基础常用的sql语句总结1

数据库及表操作创立、删除、查看数据库create database mysql1 charset utf8;drop database mysql1;show databases;use mysql1;创立、删除、查看表create table mytab( id int primary key auto_increment, name varchar(50), gender varchar(10) not null, date date,); //查看表构造desc mytab;drop table mytab;新增、更新、删除表记录insert into mytab value(null,"张三","男","2222-1-22");update mytab set name="张三" where id=1;delete from mytab where id=1;//查问所有学生信息select * from mytab;//查问所有男生select * from mytab where gender="男";// 查问男生的名字select name from mytab where gender="男";// 查问id>3的select * from mytab where id>3;// 应用as指定表头别名,as可省略select name as 姓名 from mytab;查问表记录emp10;~~~~ select * from emp;select job,dept from emp;//去除反复数据select distinct job,dept from emp;// 选出sal大于3000的所有的人名select name from emp where sal>3000;// 选出sal和bonus的和大于4500的人名~~有null值的显示不进去select name from emp where sal+bonus>4500;// ifnull(bonus,0),如果存在null,就设置为0select name from emp where sal+ifnull(bonus,0)>4500;//select name,sal from emp where sal>3000 and sal<4500;// 蕴含4500~~~~select name,sal from emp where sal between 3000 and 4500;// 选出sal为3700,4500,4200select name,sal from emp where sal=3700 or sal=4500 or sal=4200;select name,sal from emp where sal in (3700,4500,4200);// 选出不在的select name,sal from emp where sal not in (3700,4500,4200);//select name,sal from emp where sal<3000 or sal>4500;select name,sal+bonus from emp where sal+ifnull(bonus,0)<3000 or sal+ifnull(bonus,0)>4500;.查问没有部门的员工(即部门列为null值)select dept from emp where dept is null;如何查问有部门的员工(即部门列不为null值)select dept from emp where dept is not null;含糊查问查问emp表中姓名中以"刘"字结尾的员工,显示员工姓名。select name from emp where name like "刘%";查问emp表中姓名中蕴含"涛"字的员工,显示员工姓名。select name from emp where name like "%涛%";查问emp表中姓名以"刘"结尾,并且姓名为两个字的员工,显示员工姓名select name from emp where name like "刘_";多行函数查问多行函数也叫做聚合(汇集)函数,依据某一列或所有列进行统计 ...

September 16, 2020 · 2 min · jiezi

关于mysql:MySQL数据库技术与应用数据查询

摘要:数据查问是数据库系统利用的次要内容,也是用户对数据库最频繁、最常见的基本操作申请。数据查问数据查问是数据库系统利用的次要内容,也是用户对数据库最频繁、最常见的基本操作申请。数据查问能够依据用户提供的限定条件,从已存在的数据表中检索用户须要的数据。MySQL应用SELECT语句从数据库中检索数据,并将后果集以表格的模式返回给用户。 SELECT查问的根本语法select * from 表名; from关键字前面写表名,示意数据来源于是这张表 select前面写表中的列名,如果是*示意在后果中显示表中所有列 在select前面的列名局部,能够应用as为列起别名,这个别名呈现在后果集中 如果要查问多个列,之间应用逗号分隔 打消反复行在select前面列前应用distinct能够打消反复的行select distinct gender from students; 条件应用where子句对表中的数据筛选,后果为true的行会呈现在后果集中语法如下:select * from 表名 where 条件; 比拟运算符 等于=大于>大于等于>=小于<小于等于<=不等于!=或<>查问编号大于3的学生select * from students where id>3; 查问编号不大于4的科目select * from subjects where id<=4; 查问姓名不是“黄蓉”的学生select * from students where sname!='黄蓉'; 查问没被删除的学生select * from students where isdelete=0; 逻辑运算符 andornot查问编号大于3的**学select * from students where id>3 and gender=0; 查问编号小于4或没被删除的学生select * from students where id<4 or isdelete=0; 含糊查问 like%示意任意多个任意字符_示意一个任意字符查问姓黄的学生 留神:可能呈现两个_代表一个汉字的状况; select * from students where sname like '黄%'; ...

September 16, 2020 · 2 min · jiezi

关于mysql:MySQL第01篇环境安装配置系统介绍

外围概述:MySQL数据库是罕用个关系型数据,本篇咱们将零碎具体的学习MySQL数据库的装置、配置、卸载等根本的环境设置,为前期零碎学习SQL语句搭建良好的学习环境。 第一章:初始数据库1.1-数据库介绍数据的存储形式有哪些?存储地位长处毛病内存速度快数据是长期状态,不能永恒保留文件数据能够永恒保留数据操作不不便数据库① 数据能够永恒保留。②查问速度快。③数据便于管理占用资源,须要购买什么是数据库?存储数据的仓库 ,是一个软件。实质上是一个文件系统,还是以文件的形式存在服务器的电脑上的。所有的关系型数据库都能够应用通用的 SQL 语句进行治理 DBMS DataBase Management System1.2-常见的数据库排行榜排行榜 MySQL:开源收费的数据库,小型的数据库,曾经被 Oracle 收买了。MySQL6.x 版本也开始免费。起初 Sun公司收买了 MySQL,而 Sun 公司又被 Oracle 收买Oracle:免费的大型数据库,Oracle 公司的产品。DB2 :IBM 公司的数据库产品,免费的。常利用在银行零碎中。SQL Server:MicroSoft 公司免费的中型的数据库。C#、.net 等语言常应用SQLite: 嵌入式的小型数据库,利用在手机端,如:Android为什么抉择MySQL ?收费功能强大第二章:数据库的装置与卸载2.1-下载链接:https://pan.baidu.com/s/1wO_Z...提取码:b9w52.2-装置第一步:关上下载的 mysql 安装文件双击解压缩,运行“mysql-5.5.40-win32.msi” 第二步:抉择装置类型,有“Typical(默认)”、“Complete(齐全)”、“Custom(用户自定义)”三个选项,抉择“Custom”,按“next”键持续 第三步:点选“Browse”,手动指定装置目录。 第四步:填上装置目录,我的是“d:Program Files (x86)MySQLMySQL Server 5.0”,按“OK”持续。 第五步:确认一下先前的设置,如果有误,按“Back”返回重做。按“Install”开始装置。 第六步:正在装置中,请稍候,直到呈现上面的界面, 则实现 MYSQL 的装置 2.3-配置数据库装置好了还须要对数据库进行配置能力应用 MYSQL 的配置 。 第一步:【装置实现了,呈现如下界面将进入 mysql 配置向导。】 第二步:【抉择配置形式,“Detailed Configuration(手动准确配置)”、“Standard Configuration(标准配置)”,咱们抉择“Detailed Configuration”,不便相熟配置过程。】 第三步:【抉择服务器类型,“Developer Machine(开发测试类,mysql 占用很少资源)”、“Server Machine(服务器类型,mysql 占用较多资源)”、“Dedicated MySQL Server Machine(专门的数据库服务器,mysql 占用所有可用资源)”】 ...

September 16, 2020 · 2 min · jiezi

关于mysql:完成挑战即可领取ApsaraDB定制版自动黑胶雨伞阿里云10分钟快速上手-数据库硬核挑战

阿里云开发者实验室提供收费云资源和丰盛的场景化实际,旨在帮忙开发者在学习利用技术,理解阿里云产品的个性。 流动阐明:1.流动期间,程序实现并通过云数据库三个挑战工作,即可支付ApsaraDB定制版主动黑胶雨伞。(同一用户的不同账号限领一次)2.奖品限量1000把,每天上午10点会减少100个奖品余额,领完即止。前一天实现答题但没抢到奖品的用户能够次日再来支付;3.奖品以实物为主,图片仅供参考。奖品数量无限,领完流动即终止,本流动最终解释权归阿里云所有。 流动工夫:2020.9.14-2020.9.23 Step1 登陆 阿里云开发者实验室,进入流动页面Step2 体验云数据库相干场景并程序实现挑战工作Step3 支付奖品,填写您的收件人信息。(奖品将在流动完结后15个工作日内收回) 开发者实验室地址:https://developer.aliyun.com/...流动地址:https://developer.aliyun.com/adc/series/dms/ 退出钉钉群,理解更多流动详情: Q: 没有摄像头 能够用手机答题吗?A: 能够! 将手机浏览器设置 浏览器标识(UA)设置为电脑,而后关上考试页开始考试

September 16, 2020 · 1 min · jiezi

关于mysql:沪深股票历史数据下载股票历史交易数据下载

分享一个下载沪深股票历史数据的工具,能够在线批量下载股票历史交易数据,次要是m费..不然也不会分享哈,我测试的能够下载沪深A股、港股、美股所有个股的历史交易数据Excel,也能够间接查问股票历史数据 只有两步就能下载: 填股票代码、邮箱5分钟后收到股票历史数据Excel【手机用户复制【数据即服务】搜公主号即可1、2两步批量下载,0,不必转发分享。电脑用户能够间接扫码。】 放在公主号下载也实属无奈,【不然很容易被歹意下载】,股票历史数据下载是很不便的,在公主号里进行1、2两个步骤就能够了,个别5分钟就能收到股票历史数据。 在线下载很容易被有限歹意下载,十分影响失常用户的下载,【失常用户基本挤不过歹意下载的】。所以起初为了屏蔽掉这些歹意下载股票历史数据的,就设置了通过公主号下载的形式。很简略,没有套路限度的,不放在公主号正常人基本抢不过那些机器的。 就是因为在线下载容易被攻打、歹意下载,所以最初抉择了放在公主号,这样的话要攻打也是先攻打公主号,应该还没有谁有这么大的本事,所以这种办法【一是M费(0¥),二是能短暂】,还是心愿大家能了解 当初做在线下载的,基本上都是套路要钱的,不信你找一圈还得回来.股票历史数据 pro = ts.pro_api()df = pro.daily(ts_code='000002.SZ', start_date='19910129', end_date='20191226') # start_date是股票的上市日期,end_date是完结的日期。这两个日期的意思是你想获取数据的时间段。如果你想获取一年的数据就写成:start_date='20181226', end_date='20191226'print(df)输出数据(示例): ts_code trade_date open high low close pre_close change pct_chg vol amount0 000002.SZ 20180718 8.75 8.85 8.69 8.70 8.72 -0.02 -0.23 525152.77 460697.3771 000002.SZ 20180717 8.74 8.75 8.66 8.72 8.73 -0.01 -0.11 375356.33 326396.9942 000002.SZ 20180716 8.85 8.90 8.69 8.73 8.88 -0.15 -1.69 689845.58 603427.7133 000002.SZ 20180713 8.92 8.94 8.82 8.88 8.88 0.00 0.00 603378.21 535401.1754 000002.SZ 20180712 8.60 8.97 8.58 8.88 8.64 0.24 2.78 1140492.31 1008658.8285 000002.SZ 20180711 8.76 8.83 8.68 8.78 8.98 -0.20 -2.23 851296.70 744765.8246 000002.SZ 20180710 9.02 9.02 8.89 8.98 9.03 -0.05 -0.55 896862.02 803038.9657 000002.SZ 20180709 8.69 9.03 8.68 9.03 8.66 0.37 4.27 1409954.60 1255007.6098 000002.SZ 20180706 8.61 8.78 8.45 8.66 8.60 0.06 0.70 988282.69 852071.5269 000002.SZ 20180705 8.62 8.73 8.55 8.60 8.61 -0.01 -0.12 835768.77 722169.579

September 16, 2020 · 1 min · jiezi

关于mysql:Mysql索引优化

1 索引的类型UNIQUE惟一索引 不能够呈现雷同的值,能够有NULL值。 INDEX一般索引 容许呈现雷同的索引内容。 PRIMARY KEY主键索引 不容许呈现雷同的值,且不能为NULL值,一个表只能有一个primary_key索引。 fulltext index 全文索引 上述三种索引都是针对列的值发挥作用,但全文索引,能够针对值中的某个单词,比方一篇文章中的某个词,然而并没有什么卵用,因为只有myisam以及英文反对,并且效率让人不敢恭维,然而能够用coreseek和xunsearch等第三方利用来实现这个需要。 2 索引的CURD索引的创立 ALTER TABLE 实用于表创立结束之后再增加。 ALTER TABLE 表名 ADD 索引类型 (unique,primary key,fulltext,index)索引名 ALTER TABLE `table_name` ADD INDEX `index_name` (`column_list`) -- 索引名,可要可不要;如果不要,以后的索引名就是该字段名。 ALTER TABLE `table_name` ADD UNIQUE (`column_list`) ALTER TABLE `table_name` ADD PRIMARY KEY (`column_list`) ALTER TABLE `table_name` ADD FULLTEXT KEY (`column_list`)CREATE INDEX CREATE INDEX可对表减少一般索引或UNIQUE索引。 --例:只能增加这两种索引 CREATE INDEX index_name ON table_name (column_list) CREATE UNIQUE INDEX index_name ON table_name (column_list)另外,还能够在建表时增加: ...

September 15, 2020 · 3 min · jiezi

关于mysql:如何查询某只股票的历史股价

一个能够在线查问股票历史股价的小工具,目前能够查问A股、港股、美股所有个股的历史股价,另外还能够下载个股的历史股价Excel,做剖析、钻研挺有用的 只有两步就能下载: 填股票代码、邮箱5分钟后收到股票历史数据Excel【手机用户复制【数据即服务】搜公主号即可1、2两步批量下载,0,不必转发分享。电脑用户能够间接扫码。】放在公主号下载也实属无奈,【不然很容易被歹意下载】,股票历史数据下载是很不便的,在公主号里进行1、2两个步骤就能够了,个别5分钟就能收到股票历史数据。 在线下载很容易被有限歹意下载,十分影响失常用户的下载,【失常用户基本挤不过歹意下载的】。所以起初为了屏蔽掉这些歹意下载股票历史数据的,就设置了通过公主号下载的形式。很简略,没有套路限度的,不放在公主号正常人基本抢不过那些机器的。 就是因为在线下载容易被攻打、歹意下载,所以最初抉择了放在公主号,这样的话要攻打也是先攻打公主号,应该还没有谁有这么大的本事,所以这种办法【一是M费(0¥),二是能短暂】,还是心愿大家能了解 当初做在线下载的,基本上都是套路要钱的,不信你找一圈还得回来.股票历史数据 pro = ts.pro_api()df = pro.daily(ts_code='000002.SZ', start_date='19910129', end_date='20191226') # start_date是股票的上市日期,end_date是完结的日期。这两个日期的意思是你想获取数据的时间段。如果你想获取一年的数据就写成:start_date='20181226', end_date='20191226'print(df)输出数据(示例): ts_code trade_date open high low close pre_close change pct_chg vol amount0 000002.SZ 20180718 8.75 8.85 8.69 8.70 8.72 -0.02 -0.23 525152.77 460697.3771 000002.SZ 20180717 8.74 8.75 8.66 8.72 8.73 -0.01 -0.11 375356.33 326396.9942 000002.SZ 20180716 8.85 8.90 8.69 8.73 8.88 -0.15 -1.69 689845.58 603427.7133 000002.SZ 20180713 8.92 8.94 8.82 8.88 8.88 0.00 0.00 603378.21 535401.1754 000002.SZ 20180712 8.60 8.97 8.58 8.88 8.64 0.24 2.78 1140492.31 1008658.8285 000002.SZ 20180711 8.76 8.83 8.68 8.78 8.98 -0.20 -2.23 851296.70 744765.8246 000002.SZ 20180710 9.02 9.02 8.89 8.98 9.03 -0.05 -0.55 896862.02 803038.9657 000002.SZ 20180709 8.69 9.03 8.68 9.03 8.66 0.37 4.27 1409954.60 1255007.6098 000002.SZ 20180706 8.61 8.78 8.45 8.66 8.60 0.06 0.70 988282.69 852071.5269 000002.SZ 20180705 8.62 8.73 8.55 8.60 8.61 -0.01 -0.12 835768.77 722169.579

September 14, 2020 · 1 min · jiezi

关于mysql:我的网安之路数据库SQL注入篇2

SQL--筹备常识 && union联结注入本文章仅为网络安全爱好者的学习笔记,咱们应该用这些常识晋升平安技能,独特保护网络空间的平安,请读者肯定要恪守法律法规,咱们有一套残缺的网络安全法和刑法。1.筹备常识sql注入罕用函数这是笔者看i春秋相干课程时所做的总结笔记 sql注入流程 结尾两张图片列出的是在sql注入中常常用的的一些函数,当前这些函数会呈现在很多数据库安全攻防场景中,尽管目前有许许多多的自动化注入工具,但咱们还是要理解最根本的手工注入,以便为了了解SQL注入的原理,从而对其进行平安剖析和加固 2.注入流程咱们能够把注入流程分为这几个阶段: 1.判断是否有注入(其实就是判断后盾的校验严格与否)第一因素1)可控参数的扭转是否能影响页面显示后果2)输出的SQL语句是否能报错-能通过数据库的报错,看到数据库的一些语句痕迹例如:Select username, password from user where id = ?’输出一个单引号’:如果是整型或者id被单引号包裹着的会报错,如果是双引号可能就不会 3) 输出的SQL语句是否不报错-咱们的语句可能在后盾被胜利的拼接,闭合 个别的验证: 1.单引号’ 2.and 1 = 1 3.and 1 = 2证实以后的id是与数据库交互的,可能存在sql注入破绽(这个建设在以后环境没有防护软件;如果没有软件,那么就能够确定以后页面存在注入破绽)。 2.判断注入的类型3.语句是否可能被歹意批改4.咱们的邪恶语句能不能被胜利执行5.获取咱们想要的数据数据库-->表-->字段-->值3.union联结注入UNION操作符用于合并两个或多个SELECT语句的后果集。 留神,UNION 外部的SELECT语句必须领有雷同数量的列。列也必须领有类似的数据类型。同时,每条SELECT语句中的列的程序必须雷同。 默认状况,UNION 操作符选取不同的值。如果容许反复的值,请应用UNION ALL。 SELECT column_name(s) FROM table_name1UNIONSELECT column_name(s) FROM table_name2union注入利用的前提: 页面上必须要有显示位 上面我将把union注入详解介绍一下,还是和下面说的注入流程一样,只是加了一点细节 1:判断是注入类型。(因为单双引号或没有会影响到闭合)判断是否用'做字符串引号url:.../?id=1'and 1=1 --+如果出错代表没有闭合胜利,阐明可能没有用' ,还可能用了"--+是正文符,也能够用#和%23 2:判断查问列数(如上所说要用union,这相当于个性)这个时候就要用到order by命令order by 函数 是对mysql中查问的后果依照指定字段名排序,也能够指定字段的栏位来排序。 第一个查问字段为1,第二个为2,二分法来判断列数。 比方:url:.../?id=1'order by 3 --+ //判断是否有3列失常,那就有三列或三列以上持续:url:.../?id=1'order by 4 --+ 判断是否有4列如果报错:unknown column ‘4’ in ‘order clause’阐明它输入的内容所在的数据库只有3列3:判断查问显示位这里了解会有点奇怪,对于初学者来说比方 union select 1,2,3,4...from xxx这里的数字其实就是占地位,后面判断了有几列,你这里就要占几个地位,并且这里的数字会被你要查问的字段代替,在回显中相应的地位就会变成你要的数据。比方你要是把2替换成database(),查问胜利的话会在回显中显示你以后所在的数据库名称。这里的占位其实花了我很长时间来了解,过后也没怎么了解,当初终于了解了555。 ...

September 13, 2020 · 1 min · jiezi

关于mysql:MySQL数据库的表中-NULL-和-空值-到底有什么区别呢

Author:3# 一个专一于web技术的80后我不必拼过聪明人,我只须要拼过那些懒人 我就肯定会超过大部分人!CSDN@ 极客小俊,CSDN官网首发,`3#原创企业博客: ???? 极客小俊GeekerJun ????博客园Blog: ???? cnblogs.com/GeekerJun ????浅谈 NULL 和 空值的区别NULL也就是在字段中存储NULL值空字符串值也就是字段中存储空字符('') 咱们来通过测试来看看 他们彼此的区别: 1、占用空间区别 mysql> select length(NULL), length(''), length('1');+--------------+------------+-------------+| length(NULL) | length('') | length('1') |+--------------+------------+-------------+| NULL | 0 | 1 |+--------------+------------+-------------+1 row in set (0.03 sec)==小结== : 从下面的测试能够看出 字符串空值('')的长度是0,是不占用空间的, 而的NULL长度是NULL,其实它是占用空间的! NULL columns require additional space in the row to record whether their values are NULL.意思是: NULL列须要行中的额定空间来记录它们的值是否为NULL 艰深意义上讲: ('')字符串空值就像是一个真空转态杯子,什么都没有,而NULL值就是一个装满空气的杯子,尽管看起来都是一样的,然而有着实质的区别 2、插入方式区别 #创立一个表,tb_testcreate table tb_test( id int unsigned primary key auto_increment, one varchar(10) NOT NULL, two varchar(255) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;插入进行验证:#全副插入 NULL,会失败 起因就是指定的不容许插入NULLinsert into tb_test(one,two) value (NULL,NULL);1048 - Column 'one' cannot be null#全副插入 空字符串值,胜利 起因就是 ('') 字符 和 NULL的类型都不一样 指定的是不容许插入NULL,又没有说不容许('')空字符串!^.^insert into tb_test(one,two) value ('','');Query OK, 1 row affected#这也是刚刚讲过not null束缚测试insert语句的时候, 插入('')空字符串会胜利的起因! 3、在查问形式上的区别比照 ...

September 12, 2020 · 2 min · jiezi

关于mysql:mysqlNavicat报错1045mac

首先, 在设置中敞开mysql服务.框住的按钮就是敞开的按钮. 因为我曾经关了,所以我这里显示的是start 接下来关上终端, 输出mysqld_safe --user=mysql --skip-grant-tables --skip-networking& 接下来再在Navicat连贯数据库就连上了

September 12, 2020 · 1 min · jiezi

关于mysql:MySQL-varchar和char使用场景记录

varchar存储MySQL字符串类型数据。本文基于MySQL 5.7x varchar有以下特点:MySQL规定:一行数据的最大长度是65535字节,留神,是字节(byte),text、blob等大字段类型除外。varchar的存储须要独自记录其长度,是在列之外占用的空间,但包含在每行总字节数限度内。占用空间和应用字符集相干 gbk(每字符占用2字节)utf8(每字符占用3字节)utf8mb4(每字符占用4字节)为什么是 varchar(255)?以varchar(255)为例,这里的255示意字符数,假如字符集是utf8,那么存储汉字占用的字节数是255*3=765。那么为什么咱们看到有很多状况数据库里的varchar字段长度是255呢? 每个业务场景可能有特定的起因,然而设置为255有一些长处: 在utf8字符集下,每个字符占3字节。mysql innodb引擎的每个索引列长度限度为767字节(bytes),255*3=765,255恰好是不超过索引长度限度的最大长度。节俭1byte空间。varchar字段须要独自记录其长度,1byte(8bit)无符号可示意的最大数是2^8-1=255,如果超过255(小于512)则须要多申请1byte来记录字段长度。该用char还是varchar?char:定长字符串varchar:可变长字符串char和varchar区别,以char(32)和varchar(32)举例: char(32)varchar(32)占用空间固定32字符(如果数据长度不够32将用空格补齐)追随理论存储内容长度,但不超过32空格解决检索时会去掉尾部空格(数据自身有空白符也会被去掉)不会对空格解决是否记录字段长度否是。额定拿出空间记录字段数据长度(字符数)实用场景存储的数据长度基本一致,不须要空格,eg 手机号、UUID、明码加密后的密文数据长度不肯定,长度范畴变动较大的场景

September 12, 2020 · 1 min · jiezi

关于mysql:MySQL80大表秒加字段是真的吗

前言:  很早就据说 MySQL8.0 反对疾速加列,能够实现大表秒级加字段。笔者本人本地也有8.0环境,但始终未进行测试。本篇文章咱们就一起来看下 MySQL8.0 疾速加列到底要如何操作。 1.理解背景信息表构造的变更是业务运行过程中比拟常见的需要之一,在 MySQL 的环境中,能够应用 Alter 语句来实现这些操作,这些 Alter 语句对应的操作通常也称之为 DDL 操作。通常状况下大表的 DDL 操作都会对业务有很显著的影响,须要在业务闲暇,或者是保护的时候做。MySQL 5.7 反对 Online DDL,大部分 DDL 不影响对表的读取和写入,然而仍然会耗费十分多的工夫,且占用额定的磁盘空间,并会造成主从提早。所以大表 DDL 仍是一件令 DBA 头痛的事。 听闻 MySQL 8.0 解决了这件令 DBA 头痛的事,那让咱们来具体理解下吧。想理解新性能,最简略的办法就是查阅官网文档。查阅官网文档得悉,疾速加列即 Instant Add Column ,该性能自 MySQL 8.0.12 版本引入,是由腾讯游戏DBA团队奉献。留神一下,此性能只实用于 InnoDB 表。 2.疾速加列测试疾速加列采纳的是 instant 算法,使得增加列时不再须要 rebuild 整个表,只须要在表的 metadata 中记录新增列的根本信息即可。在 alter 语句后减少 ALGORITHM=INSTANT 即代表应用 instant 算法, 如果未明确指定,则反对 instant 算法的操作会默认应用。如果 ALGORITHM=INSTANT 指定但不反对,则操作立刻失败并显示谬误。 对于列的 DDL 操作,是否反对 instant 等算法,官网文档给出了一个表格,现整顿如下,星号示意不是全副反对,有依赖项。 操作InstantIn PlaceRebuilds Table容许并发DML仅批改元数据增加列Yes*YesNo*Yes*No删除列NoYesYesYesNo重命名列NoYesNoYes*Yes更改列程序NoYesYesYesNo设置列默认值YesYesNoYesYes更改列数据类型NoNoYesNoNo扩大VARCHAR列大小NoYesNoYesYes删除列默认值YesYesNoYesYes更改主动增量值NoYesNoYesNo*设置列为nullNoYesYes*YesNo设置列not nullNoYes*Yes*YesNo批改ENUM/SET列的定义YesYesNoYesYes instant 算法应用最宽泛的应该是增加列了,能够看到应用该算法还是有些限度的,一些限度如下: 如果 alter 语句蕴含了 add column 和其余的操作,其中有操作不反对 instant 算法的,那么 alter 语句会报错,所有的操作都不会执行。只能程序加列, 仅反对在最初增加列,而不反对在现有列的两头增加列。不反对压缩表,即该表行格局不能是 COMPRESSED。不反对蕴含全文索引的表。不反对长期表。不反对那些在数据字典表空间中创立的表。说的再多不如理论来测下,上面咱们以 8.0.19 版本为例来理论验证下: ...

September 11, 2020 · 2 min · jiezi

关于mysql:MySQL数据库

命令:命令行连贯数据库: mysql -h localhost -u 用户名(mysql 默认用户root) -p(这个是要输出明码带的选项)Ps: 该命令为 mysql -h localhost -u root -proot。这里的 -p 前面的 root 就是明码。此处特地留神 -p 和明码之间没有空格。如果呈现空格,零碎将不会把前面的字符串当成明码来看待切换以后数据库: use 数据库名; 查看所有数据库: 1.show databases;2.select schema_name from information_schema.schemataG查看所有用户: select user,host from mysql.user; 查看mysql数据库的运行状态: status; 查看以后数据库: select database();show tables; 命令后,查看 Tables_in_数据库名status; 命令后,查看 Current database: 前面就是以后数据库。查看表构造: desc table_name; 查询数据库连贯: show full processlist; 不连贯数据库查询数据库连贯: mysqladmin -uroot -p  processlist 查看最大连接数: show status like'%Max_used_connections%'; 以后连接数: show status like '%Threads_connected%'; 表锁定: show status like '%table_lock%'; ...

September 10, 2020 · 1 min · jiezi

关于mysql:MySQL主库丛库配置

1.查看数据库状态2.配置Linux零碎中,批改主库外围配置2.1 批改主库外围配置文件my.cnf #进入my.cnf文件进行编辑vim /etc/my.cnf批改内容如下2.2批改好my.cnf文件之后重启数据库 #重新启动数据库systemctl restart mariadb3.查看主库的状态 4.设置丛库的my.cnf文件4.1重启丛库数据库 #重新启动数据库systemctl restart mariadb4.2查看丛库状态5.实现主从挂载 /*我是从库信息 130*/SHOW MASTER STATUS;/*实现主从的挂载*/ CHANGE MASTER TO MASTER_HOST="192.168.126.129",#主库IP地址MASTER_PORT=3306,MASTER_USER="root",MASTER_PASSWORD="root",MASTER_LOG_FILE="mysql-bin.000001", #主库生成的二进制文件名(查看主库信息的表中的第一个字段)MASTER_LOG_POS=245/*启动主从服务*/ START SLAVE /*查看主从的状态*/ SHOW SLAVE STATUS /*如果报错 则重新配置*/STOP SLAVE/*从新搭建主从将上述命令从新执行一遍*/

September 9, 2020 · 1 min · jiezi

关于mysql:手机如何查股票的历史价格手机在线下载股票的历史数据Excel

手机有时候查股票历史价格数据不太不便,明天介绍一个能够手机在线下载股票历史数据Excel的工具,不须要下载任何软件,收费工具(不然也不会举荐了...手机当初都快代替电脑了,用手机下载的的确多,所以举荐一下只有两步就能下载: 填股票代码、邮箱5分钟后收到股市历史数据Excel【搜公主号【数据即服务】即可1、2两步批量下载,收费,不必转发分享。】放在公主号下载也实属无奈,【不然很容易被歹意下载】,股票历史数据下载是很不便的,在公主号里进行1、2两个步骤就能够了,个别5分钟就能收到股票历史数据。手机用户选中复制【数据即服务】在公主号里搜寻关注即可,电脑用户能够间接用手机扫码。在线下载很容易被有限歹意下载,十分影响失常用户的下载,【失常用户基本挤不过歹意下载的】。所以起初为了屏蔽掉这些歹意下载股票历史数据的,就设置了通过公主号下载的形式。很简略,没有套路限度的,不放在公主号正常人基本抢不过那些机器的。 就是因为在线下载容易被攻打、歹意下载,所以最初抉择了放在公主号,这样的话要攻打也是先攻打公主号,应该还没有谁有这么大的本事,所以这种办法【一是M费(0¥),二是能短暂】,还是心愿大家能了解 当初做在线下载的,基本上都是套路要钱的,不信你找一圈还得回来.手机如何查股票的历史价格?手机在线下载股票的历史价格Excel手机如何查股票的历史价格?手机在线下载股票的历史价格Excel import reimport pandasimport requestsurl = '指标网站的url' # 这里不写具体网站的链接了,大体做法都是一样的。response = requests.get(url).text # 失去网页的源代码###上面是解析收盘数据的代码,大部分都能够这么参考,简略的正则表达式###times = re.findall('class="first left bold noWrap">(.*?)</td>').group(1) # 获取到所有历史的交易工夫open_price = re.findall('class="first left bold noWrap">.*?</td>\s+<td data-real-value="(.*?)"').group(1) # 失去所有历史开盘价数据close_price = re.findall('class="first left bold noWrap">.*?</td>\s+<td.*?</td>\s+<td data-real-value="(.*?)">').group(1) # 失去所有历史收盘价数据high_price = re.findall('class="first left bold noWrap">.*?</td>\s+<td.*?</td>\s+<td.*?</td>\s+<td data-real-value="(.*?)">').group(1) # 失去所有历史收盘价数据###上面是数据下载老本地数据局部,以下载为本地Excel为例###df = pandas.DataFrame(a, columns=['open_price', 'close_price', 'vol']) # 把数据转成DataFrame格局wt = ExcelWriter(path) # path 是文件的保留门路,要准确到文件名。数据下载老本地数据之后,就要到这个门路去找。例如:C:\\Users\\Administrator\\Desktop\\股票所有历史收盘数据下载老本地数据.xls 就依照这个门路找到保留好的Excel就行了df.to_excel(wt, sheet_name='如何下载股票的历史收盘价' , index=False)

September 9, 2020 · 1 min · jiezi

关于mysql:mysql事务的实现原理

1.什么是事务?数据库事务( transaction)是拜访并可能操作各种数据项的一个数据库操作序列,这些操作要么全副执行,要么全副不执行,是一个不可分割的工作单位。事务由事务开始与事务完结之间执行的全副数据库操作组成 2.事务的四大个性(ACID)2.1 Atomicity 原子性原子性是指事务是一个不可分割的单位,要么都产生,要么都不产生2.1.1 回滚日志想要保障事务的原子性,就须要在异样产生时,对曾经执行的操作进行回滚,而在 MySQL 中,复原机制是通过回滚日志(undo log)实现的,所有事务进行的批改都会先记录到这个回滚日志中,而后在对数据库中的对应行进行写入。回滚日志除了可能在产生谬误或者用户执行 ROLLBACK 时提供回滚相干的信息,它还可能在整个零碎产生解体、数据库过程间接被杀死后,当用户再次启动数据库过程时,还可能立即通过查问回滚日志将之前未实现的事务进行回滚,这也就须要回滚日志必须先于数据长久化到磁盘上,是咱们须要先写日志后写数据库的次要起因。回滚日志并不能将数据库物理的复原到执行语句或事务之前的样子,他是逻辑日志。 2.2 Consistency 一致性一致性是指利用从一个正确的状态到另外一个正确的状态。ACID就是通过AID来保障C的。如何了解正确的状态呢?正确的状态就是咱们须要约定的一些束缚,比方张三账户有90元,如果他买货色须要破费100元,则买完当前账户余额就是-10元,那么-10元是不是一个正确的状态呢?答案是的。这是因为咱们并没有约定账户字段不能为负。2.3 Isolation 隔离性多个事务并行处理时,互相应该没有影响隔离级别:1.读未提交2.读已提交3.可反复读(innodb)4.串行化 脏读:读到其余事务未提交的更新数据,幻读:一个事务,读取两次,失去的记录条数不统一不可反复读: 反复读取后数据不统一 2.3.1 隔离级别的实现其实也是多线程问题。所以应用并发管制机制,限度不同事务对同一资源的读写。这里介绍三种最重要的并发控制器机制的工作原理。1.锁 mysql提供两种锁,共享锁和互斥锁,也叫读锁和写锁 2.工夫戳应用工夫戳的话,就是乐观锁的实现形式,写入数据的时候先对数据进行批改,再判断工夫戳是否变动过,如果没有,就更新,变了的话,就生成新的工夫戳再次更新数据3.多版本和快照隔离通过保护多个版本的数据,数据库能够容许事务在数据被其余事务更新 时,去读取旧版本的数据。2.4 Duration 持久性持久性是指一旦事务被提交,他对数据库中数据的扭转就是永久性的。3.事务的状态:Active:事务的初始状态,示意事务正在执行;Partially Commited:在最初一条语句执行之后;Failed:发现事务无奈失常执行之后;Aborted:事务被回滚并且数据库复原到了事务进行之前的状态之后;Commited:胜利执行整个事务;

September 8, 2020 · 1 min · jiezi

关于mysql:第二阶段-第一模块

September 5, 2020 · 0 min · jiezi

关于mysql:MySQL事务和持久化原理

MySQL事务和长久化原理根底概念篇1、事务个性ACID原子性A:要么胜利,要么失败,不可分割。一致性C:事务执行前后,数据库处于一致性状态,事务胜利变动正确。事务失败返回原始阶段。隔离性I:并发下,不同事务操作雷同数据,并发事务所做的批改隔离,要么是另一个事务批改前没要么是另一个事务批改后;不存在中间状态。持久性:事务完结后,对数据库的操作必须要永恒保留下来(保留在磁盘中)。2、事务的隔离级别ISOLATION_DEFUALT:后端数据库默认隔离级别。ISOLATION_READ_UNCOMMITED:最低级别,容许读尚未提交的数据变更,可能会呈现脏读、幻读、不可反复读。ISOLATION_READ_COMMITED:RC,容许读取并发事务已提交的数据,能够阻止脏读,但可能会呈现幻读、不可反复读。ISOLATION_REPEATABLE_READ:RR,同一字段,屡次读取后果都是统一的,除非数据自身被批改,可阻止脏读、不可反复读,但仍有幻读。ISOLATION_SERIALIZABLE:最高隔离级别,齐全遵从ACID,没有脏读、幻读、不可反复读,但速度慢,齐全锁定事务。3、脏读、幻读、不可反复读脏读:一个事务读取了被另一个事务改写但尚未提交的数据,如果数据扭转后被回滚,第一个事务读取的数据就会有效。幻读:当事务T1读取几行数据后,另外一个并发事务T2插入了一些记录,幻读就产生了,第一个事务T1发现了一些原来没有的额定数据记录(新增、或删除)。不可反复读:不可反复读产生在一个事务执行屡次查问,但每次查问的后果都不同,通常因为另外一个事务在中途做了更新。4、MySQL事务的实现MySQL的事务的四个个性(ACID),是通过InnoDB日志和锁来保障的。 事务的隔离性是通过数据库锁的机制实现。事务的持久性是通过Redo Log来实现。事务的原子性和一致性是通过Undo Log实现的。实现过程: 在操作工作数据之前,首先将数据备份到Undo Log中,而后再进行数据的批改操作;呈现谬误时执行Roll Back,零碎能够利用Undo Log复原到事务开始之前的状态。Redo Log是记录新数据的备份,事务提交之前,只将Redo Log长久化即可。零碎解体时,数据库未长久化,但Redo Log曾经长久化,零碎能够依据Redo Log将数据恢复并提交。MVCC篇1、MVCC简介 MVCC:Multi-Version Concurrency Control多版本并发管制,不仅用于MySQL,分布式事务也能够应用;是一种乐观锁,用于RR(可反复读)、RC(读已提交)隔离级别。应用了行级锁。 当执行查问sql时会生成一致性视图read-view,它由执行查问时所有未提交事务id数组(数组里最小id为min_id)和已创立的最大事务id(max_id)组成,查问的数据后果须要跟read-view做比对从而失去快照后果。 MVCC通过保留数据在某个工夫点的快照来实现的,基本特征如下: 每行数据都存在一个版本,每次数据更新时都更新该版本。批改时Copy出以后版本随便批改,各个事务之间互不烦扰。保留时比拟版本号,如果胜利commit则笼罩原记录;失败则放弃copy。2、InnoDB引擎的MVCC策略 每行数据额定保留两个暗藏列(以后行创立时的版本号和删除时的版本号,另外还有一列称为回滚指针,用于事务回滚); InnoDB外部为每一行增加了两个暗藏列:DB_TRX_ID版本号和DB_ROLL_PTR回滚指针(MySQL另外还有一个暗藏列DB_ROW_ID,这是在InnoDB表没有主键的时候会用来作为主键)。 DB_TRX_ID:长度为6字节,存储了插入或更新语句的最初一个事务的事务ID。DB_ROLL_PTR:长度为7字节,称之为:回滚指针。回滚指针指向写入回滚段的undo log记录,读取记录的时候会依据指针去读取undo log中的记录。DB_ROW_ID: 行标识(暗藏枯燥自增 ID ),大小为 6 字节,如果表没有主键, InnoDB 会主动生成一个暗藏主键,因而会呈现这个列。另外,每条记录的头信息( record header )里都有一个专门的 bit ( deleted_flag )来示意以后记录是否曾经被删除。 快照读:在RR隔离级别下,在不加锁的状况下MySQL会依据回滚指针抉择从undo log记录中获取快照数据,而不总是获取最新的数据,这也就是为什么另一个事务提交了数据,在以后事务中看到的仍然是另一个事务提交之前的数据。RR隔离级别快照并不是在BEGIN就开始产生了,而是要等到事务当中的第一次查问之后才会产生快照,之后的查问就只读取这个快照数据。 3、版本链比对规定规定形容1事务规定: 从最新记录开始查找: 如果,以后记录的事务id<未提交事务的最小id;阐明事务都是已提交的,可读。如果,未提交事务的最小id<=以后记录的事务id<=未提交事务的最大id;事务id是否在未提交事务id数组中,若在则不可读(但能够读本人本事务的)。如果,以后记录的事务id>事务的最大id;事务还未开始,不可读。RR(可反复读):返回的readview是第一条记录的,在事务中不会反复生成。 RD(读已提交):每次查问都生成最新的readview。 规定形容21、如果落在绿色局部(trx_id<min_id),示意这个版本是曾经提交的事务生成的,这个数据是可见的; 2、如果落在红色局部(trx_id>max_id),示意这个版本是由未来启动的事务生成的,是必定不可见的; 3、如果落在黄色局部(min_id<=trx_id<=max_id),那就包含两种状况: 若row的trx_id在数组中,示意这个版本是由还没有提交的事务生成的,不可见,以后本人的事务是可见的。若row的trx_id不再数组中,示意这个版本是曾经提交了的事务生成的,可见。 删除的实现 对于删除的状况能够认为是update的非凡状况,会将版本链上最新的数据复制一份,而后将trx_id批改成删除操作的trx_id,同时在该条记录的头信息(record header)里的(delete_flag)标记位写上true,来示意以后记录曾经被删除,在查问时依照下面的规定查找到对应的记录,如果delete_flag标记位为true,意味着记录已被删除,则不返回数据。 版本链生成是全局的不是繁多表的,这些版本链记录在undo日志中。rc隔离级别下是多个select是中途更新read-view快照的。而RR隔离级别是不更新read-view的,因而可反复读。 4、案例剖析事务过程: 事务4的剖析过程: 1、select name from table where id=1; readview:[1,3] 3 从undo日志的首行开始: trx_id=1,属于未提交事务的最小id<=以后记录的事务id<=未提交事务的最大id,1在其中,所以不可读。持续向下。 ...

September 4, 2020 · 2 min · jiezi

关于mysql:关于MySQL参数这些你要知道

前言: 在后面一些文章中,常常能看到介绍某某参数的作用,可能有些小伙伴仍搞不清楚 MySQL 参数是啥。本篇文章咱们来聊聊 MySQL 参数,学习下如何治理保护 MySQL 参数。 1.MySQL参数概念咱们所说的参数在官网文档中称为 零碎变量(system variable),不同的变量有着不同的作用。 MySQL 服务端保护了许多示意其配置的零碎变量,所有变量均有默认值。个别能够在启动命令行中或配置文件中对它们进行设置。 零碎变量分为全局零碎变量(global)和会话零碎变量(session)。有些变量既有全局变量又有会话变量,有些变量只有全局变量。全局变量影响服务器的全局操作,会话变量只影响具体客户端连贯相干操作。若会话变量未独自设置,则继承自相应全局变量。 MySQL 服务启动时,会依照配置文件或命令行中指定的选项来给全局变量赋值,没有指定则按默认值解决。服务启动后,通过连贯服务器并执行 SET GLOBAL var_name 语句能够动静更改局部全局变量的值。要想更改全局变量,必须具备 SUPER 权限。 MySQL 还为每个客户端连贯保护会话变量,连贯时应用相应全局变量的以后值对客户端会话变量进行初始化。客户端能够通过 SET SESSION var_name 语句来动静更改会话变量。设置会话变量不须要非凡权限,但会话变量只作用于以后连贯。 2.参数查问与变更示例这里也要阐明下,并不是所有的参数都能够动静批改,某些参数只能写入配置文件而后重启数据库能力失效。上面咱们来展现下 MySQL 参数的查问与批改。 # 参数查问show global variables like 'var_name'; //查看全局零碎变量的值,可应用%通配符show session variables like 'var_name'; //查看会话零碎变量的值show variables like 'var_name'; //优先返回会话零碎变量,若会话零碎变量不存在,则返回全局零碎变量。# 也可用select查问某个特定参数select @@global.var_name; //全局零碎变量select @@session.var_name; //会话零碎变量select @@var_name; //优先会话零碎变量# 查问示例mysql> show global variables like 'server_id';+---------------+---------+| Variable_name | Value |+---------------+---------+| server_id | 1003306 |+---------------+---------+1 row in set (0.00 sec)mysql> show global variables like 'log_bin%';+---------------------------------+-------------------------------+| Variable_name | Value |+---------------------------------+-------------------------------+| log_bin | ON || log_bin_basename | /data/mysql/logs/binlog || log_bin_index | /data/mysql/logs/binlog.index || log_bin_trust_function_creators | ON || log_bin_use_v1_row_events | OFF |+---------------------------------+-------------------------------+5 rows in set (0.00 sec)mysql> select @@server_id;+-------------+| @@server_id |+-------------+| 1003306 |+-------------+1 row in set (0.00 sec)# 动静批改参数set global var_name = value;set session var_name = value;set var_name = value;set @@global.var_name = value;set @@session.var_name = value;set @@var_name = value;# 参数批改示例mysql> set global sort_buffer_size = 2097152;Query OK, 0 rows affected (0.00 sec)mysql> set session sort_buffer_size = 4194304;Query OK, 0 rows affected (0.00 sec)mysql> select @@global.sort_buffer_size,@@session.sort_buffer_size;+---------------------------+----------------------------+| @@global.sort_buffer_size | @@session.sort_buffer_size |+---------------------------+----------------------------+| 2097152 | 4194304 |+---------------------------+----------------------------+1 row in set (0.00 sec)参数动静批改后,倡议将其写入配置文件。因为动静批改的参数在 MySQL 服务重启后会生效,只有写入配置文件才可能重启后仍无效。对于一些无奈动静批改的参数,咱们只能通过批改配置文件,而后重启来使之失效。这里所说的配置文件就是 my.cnf 文件了,Linux 零碎个别在 /etc 目录下;Windows 零碎个别在 basedir 目录下,名称可命名为 my.ini 。大部分参数须要配置在 [mysqld] 下,一份简略的配置文件示例如下: ...

September 4, 2020 · 2 min · jiezi

关于mysql:你应该了解的MySQL锁分类

MySQL中的锁锁是为了解决并发环境下资源竞争的伎俩,其中乐观并发管制,乐观并发管制和多版本并发管制是数据库并发管制次要采纳的技术手段(具体可见我之前的文章),而MySQL中的锁就是其中的乐观并发管制。 MySQL中的锁有很多品种,咱们能够依照上面形式来进行分类。 按读写从数据库的读写的角度来分,数据库的锁能够分为分为以下几种: 独占锁:又称排它锁、X锁、写锁。X锁不能和其余锁兼容,只有有事务对数据上加了任何锁,其余事务就不能对这些数据再搁置X了,同时某个事务搁置了X锁之后,其余事务就不能再加其余任何锁了,只有获取排他锁的事务是能够对数据进行读取和批改。共享锁:又称读锁、S锁。S锁与S锁兼容,能够同时搁置。更新锁:又称U锁。它容许再加S锁,但不容许其余事务再施加U锁或X锁,当被读取的数据要被更新时,则降级S锁为X锁。U锁的长处是容许事务A读取数据的同时不阻塞其它事务,并同时确保事务A自从上次读取数据后数据没有被更改,因而能够缩小X锁和S锁的抵触,同时防止应用S锁后再降级为X锁造成的死锁景象。留神,MySQL并不反对U锁,SQLServer才反对U锁。兼容性矩阵如下(+ 代表兼容, -代表不兼容) 右侧是已加的锁XSUX---S-++U-+-按粒度MySQL反对不同级别的锁,其锁定的数据的范畴也不同,也即咱们常说的锁的粒度。MySQL有三种锁级别:行级锁、页级锁、表级锁。不同的存储引擎反对不同的锁粒度,例如MyISAM和MEMORY存储引擎采纳的是表级锁,页级锁仅被BDB存储引擎反对,InnoDB存储引擎反对行级锁和表级锁,默认状况下是采纳行级锁。 特点 表级锁:开销小,加锁快;不会呈现死锁;锁定粒度大,产生锁抵触的概率最高,并发度最低。数据库引擎总是一次性同时获取所有须要的锁以及总是按雷同的程序获取表锁从而防止死锁。行级锁:开销大,加锁慢;会呈现死锁;锁定粒度最小,产生锁抵触的概率最低,并发度也最高。行锁总是逐渐取得的,因而会呈现死锁。页面锁:开销和加锁工夫界于表锁和行锁之间;会呈现死锁;锁定粒度界于表锁和行锁之间,并发度个别。 上面具体介绍行锁和表锁,页锁因为应用得较少就不介绍了。 行锁按行对数据进行加锁。InnoDB行锁是通过给索引上的索引项加锁来实现的,Innodb肯定存在聚簇索引,行锁最终都会落到聚簇索引上,通过非聚簇索引查问的时候,先锁非聚簇索引,而后再锁聚簇索引。如果一个where语句外面既有聚簇索引,又有二级索引,则会先锁聚簇索引,再锁二级索引。因为是分步加锁的,因而可能会有死锁产生。 MySQL的行锁对S、X锁上做了一些更准确的细分,使得行锁的粒度更细小,能够缩小抵触,这就是被称为“precise mode”的兼容矩阵。(该矩阵没有呈现在官网文档上,是有人通过Mysql lock0lock.c:lock_rec_has_to_wait源代码揣测进去的。) 行锁兼容矩阵间隙锁(Gap Lock):只锁间隙,前开后开区间(a,b),对索引的间隙加锁,避免其余事务插入数据。记录锁(Record Lock):只锁记录,特定几行记录。临键锁(Next-Key Lock):同时锁住记录和间隙,前开后闭区间(a,b]。插入用意锁(Insert Intention Lock):插入时应用的锁。在代码中,插入用意锁,实际上是GAP锁上加了一个LOCK_INSERT_INTENTION的标记。右侧是已加的锁(+ 代表兼容, -代表不兼容)GRNIG++++R+––+N+––+I–+–+S锁和S锁是齐全兼容的,因而在判断兼容性时不须要比照准确模式。准确模式的检测,用在S、X和X、X之间。从这个矩阵能够看到几个特点: INSERT操作之间不会有抵触:你插入你的,我插入我的。GAP,Next-Key会阻止Insert:插入的数据正好在区间内,不容许插入。GAP和Record,Next-Key不会抵触Record和Record、Next-Key之间互相抵触。已有的Insert锁不阻止任何筹备加的锁。间隙锁(无论是S还是X)只会阻塞insert操作。留神点对于记录锁,列必须是惟一索引列或者主键列,查问语句必须为准确匹配,如“=”,否则记录锁会进化为临键锁。间隙锁和临键锁基于非惟一索引,在惟一索引列上不存在间隙锁和临键锁。表锁与锁表的误区只有正确通过索引条件检索数据(没有索引生效的状况),InnoDB才会应用行级锁,否则InnoDB对表中的所有记录加锁,也就是将锁住整个表。留神,这里说的是锁住整个表,然而Innodb并不是应用表锁来锁住表的,而是应用了上面介绍的Next-Key Lock来锁住整个表。网上很多的说法都是说用表锁,然而实际上并不是,咱们能够通过上面的例子来看看。 假如咱们有以下的数据(MySQL8): mysql> select * from users;+----+------+-----+| id | name | age |+----+------+-----+| 1 | a | 1 || 2 | a | 1 || 3 | a | 1 || 4 | a | 1 || 5 | a | 1 |+----+------+-----+办法一: ...

September 2, 2020 · 2 min · jiezi

关于mysql:初次尝试写学生信息管理系统

首先在mysql中建一个简略的表 如下图所示接下来写java中的编码,格局如图要写一个学生信息管理系统,我是仿照网上的一个程序思路写的 首先要留神的是因为要与数据库连贯所以要在此我的项目中退出一个连贯的包如下图所示 因为学生表中有5个元素所以我写了一个user类来表白这几个元素,代码如图而后写一个数据库连贯类dbUtil类,这里须要留神的是mysql8.0以上的数据库连贯为com.mysql.cj.jdbc.Driver 而8.0以下的则是com.mysql.jdbc.Driver因为要实现管理系统的各种性能所以写一个Dao类其中searchUser办法用来查问学号是否反复 register,delete,update类用来实现学生信息录入,删除,更新信息 deleteBatches办法用来实现批量删除 findKeyword办法和selectList办法用来实现条件查问 findUser办法用来查找指定学号的所有信息。 selectNotDeleteList办法用来封装所有信息,信息传输到ListServlet类,这个类承受list再传输到创立的userList.jsp中 Dao中的办法全写好后,就开始写一些性能的实现逻辑和与jsp页面的连贯首先是与studentregisterjsp页面连贯的registerServlet类其中在任何中央都须要留神的是字符转码问题,从jsp页面传过来的数据须要这两行代码req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8") 之后不再赘述 而后是验证学号的loginServlet类与其连贯的studentloginjsp页面 接下来是批改逻辑modifyServlet类这里应用了findUser办法 接下来是删除类deleteServlet和批量删除类deleteBatchesServlet 最初是条件查问类 而后再增加一些失败胜利的jsp页面即可 至此大抵实现 成绩:1.注册界面 2.验证界面 3.治理界面

September 2, 2020 · 1 min · jiezi

关于mysql:MySQL的锁到底有多少内容-再和腾讯大佬的技术面谈我还是小看锁了

对酒当歌,人生几何! 朝朝暮暮,唯有己脱。 苦苦寻找找工作之间,殊不知今日之时乃我心之痛,难到是我不配领有工作嘛。自面试后他所谓的期待都过来一段时日,惋惜在下京东上的小金库都要见低啦。每每想到不禁心中一紧。正处尴尬之间,手机突然来了个短信预约后续面试。 我即刻三下五除二拎包踢门而出。飞奔而去。 此刻面试门外首先映入眼帘的是一个红色似皮球的货色,似圆非圆。好奇冬瓜落地个别。上半段还有一段湿湿的局部,显得尤为入目。这是什么状况? 紧接着现身一名中年男子。他身着纯白色T桖衫的,一灰色宽松的休闲西裤,腰围至多得三十好几。外加一双夏日必备皮制凉鞋。只见,他正抬头看着手上的一张A4纸。透过一头彩色短发。满脸的赘肉横生。外加上那大腹便便快要把那T桖衫给撑爆的肚子。 看得我好生胆怯,不由得咽了咽口水,惟恐本人说错话。这宛如一颗肉粽呀。不退职场摸滚打拼8、9年,也不会有以后这现象。 什么是锁面试官:: 你是来加入面试的吧?吒吒辉: 不 不 不,我是来加入复试呢。 面试官:: 看到上次他人点评,MySQL优化还阔以。那你先谈谈对锁的了解? 吒吒辉: 嘿嘿,还好! 锁是计算机在进行多 过程、线程执行调度时强行限度资源拜访的同步机制,用于在并发拜访时保证数据的一致性、有效性; 锁是在执行多线程时,用于强行限度资源拜访的同步机制,即用在并发管制中保障对互斥的要求。 个别的锁是倡议锁(advisory lock),每个线程在拜访对应资源前都需获取锁的信息,再依据信息决定是否能够拜访。若拜访对应信息,锁的状态会扭转为锁定,因而其它线程此时不会来拜访该资源,当资源完结后,会复原锁的状态,容许其余线程的拜访。 有些零碎有强制锁(mandatory lock),若有未受权的线程想要拜访锁定的数据,在拜访时就会产生异样。 ---《维基百科》锁的类型和利用原理面试官:: 那个别数据库有哪些锁? 个别怎么应用? 此刻,用我那目瞪口呆的眼神看向面试官,心田实属难堪+胆怯,数据库不就是共享和互斥锁吗? 这样看来,是我太嫩。此处必有坑。殊不知此刻我心田已把你拿捏,定斩不饶。 吒吒辉: 数据库的锁依据不同划分形式有很多种说法,在业务拜访上有以下两种: 排他锁在访问共享资源之前对其进行加锁,在拜访实现后进行解锁操作。 加锁胜利后,任何其它线程申请来获取锁都会被阻塞,直到当火线自行开释锁。 线程3状态:就绪、阻塞、执行如解锁时,有一个以上的线程阻塞(资源已开释),那么所有尝试获取该锁的线程都被CPU认为就绪状态, 如果第一个就绪状态的线程又执行加锁操作,那么其余的线程又会进入就绪状态。 在这种形式下,只能有一个线程拜访被互斥锁爱护的资源 故此,MySQL的SQL语句加了互斥锁后,只有承受到申请并获取锁的线程才可能拜访和批改数据。 因为互斥锁是针对线程访问控制而不是申请自身。 共享锁被加锁资源是可被共享的,但仅限于读申请。它的写申请只能被获取到锁的申请独占。 也就是加了共享锁的数据,只可能以后线程批改,其它线程只能读数据,并不能批改。 吒吒辉: 在 SQL 申请上可分为读、写锁。但实质还是对应对共享锁和排它锁。 面试官: 那 SQL 申请上不加锁怎么拜访? 为啥说它们属于共享锁和排他锁? 这之间有何分割? 吒吒辉: 除加锁读外,还有一种不加锁读的状况。这种形式称为快照读,读申请加锁称为共享读。 针对申请加共享、排它锁的起因在于,读申请天生是幂等性的,不管你读多少次数据不会发生变化,所以给读申请加上锁就应该为共享锁。 不然怎么保障它的特点呢? 而写申请,自身就需对数据进行批改,所以就须要排它锁来保证数据批改的一致性。 吒吒辉: 如果依照锁的颗粒度划分看,就有表锁和行锁 表锁:是MySQL中最根本的锁策略,并且是开销最小的策略。并发解决较少。表锁由MySQL服务或存储引擎治理。少数状况由服务层治理,具体看SQL操作。 例如:服务器会为诸如 ALTER TABLE 之类的语句应用表锁,而疏忽存储引擎的锁。 加锁机制: 它会锁定整张表。一个用户在对表进行写操作(插人、删除、更新等)前,须要先取得写锁,这会阻塞其余用户对该表的所有读写操作。只有没有写锁时,其余用户能力获取到读锁。 ...

September 1, 2020 · 2 min · jiezi

关于mysql:必须了解的mysql三大日志binlogredo-log和undo-log

起源:https://juejin.im/post/686025...作者:六点半起床日志是 mysql 数据库的重要组成部分,记录着数据库运行期间各种状态信息。 mysql 日志次要包含谬误日志、查问日志、慢查问日志、事务日志、二进制日志几大类。作为开发,咱们重点须要关注的是二进制日志( binlog )和事务日志(包含 redo log 和 undo log ),本文接下来会具体介绍这三种日志。 binlog binlog 用于记录数据库执行的写入性操作(不包含查问)信息,以二进制的模式保留在磁盘中。 binlog 是 mysql 的逻辑日志,并且由 Server 层进行记录,应用任何存储引擎的 mysql 数据库都会记录 binlog 日志。 逻辑日志: 能够简略了解为记录的就是sql语句 。物理日志: mysql 数据最终是保留在数据页中的,物理日志记录的就是数据页变更 。 binlog 是通过追加的形式进行写入的,能够通过 max_binlog_size 参数设置每个 binlog 文件的大小,当文件大小达到给定值之后,会生成新的文件来保留日志。 binlog应用场景在理论利用中, binlog 的次要应用场景有两个,别离是 主从复制 和 数据恢复 。 主从复制 :在 Master 端开启 binlog ,而后将 binlog 发送到各个 Slave 端, Slave 端重放 binlog 从而达到主从数据统一。数据恢复 :通过应用 mysqlbinlog 工具来复原数据。binlog刷盘机会对于 InnoDB 存储引擎而言,只有在事务提交时才会记录 biglog ,此时记录还在内存中,那么 biglog 是什么时候刷到磁盘中的呢? mysql 通过 sync_binlog 参数管制 biglog 的刷盘机会,取值范畴是 0-N : ...

August 31, 2020 · 3 min · jiezi

关于mysql:Mysql中通过关联update将一张表的一个字段更新到另外一张表中

接着之前写的一篇文https://www.cnblogs.com/lingyejun/p/11915413.html 做什么事件更新book_borrow表,设置其中的student_name为student表中的name,关联条件为book_borrow.student_id = student_id student表 book_borrow表 几种不同的更新形式保留原表数据的更新只会更新student表中有的数据,student表中查不到的数据,在book_borrow表中还放弃不变,不会更新,相当于内连贯 update book_borrow br,student st set br.student_name = st.name where br.student_id = st.id; 全副以右表数据为准更新后果以student的查问后果为准,student中没有查到的记录会全副被更新为null 相当于外连贯 update book_borrow br set student_name = (select name from student where id = br.student_id);update book_borrow br left join student st on br.student_id = st.id set br.student_name = st.name; 本篇文章如有帮忙到您,请给「翎野君」点个赞,感谢您的反对。

August 30, 2020 · 1 min · jiezi

关于mysql:mysql优化篇like和的性能分析

引言 那应用过数据库的人大部分都晓得,like和=号在性能上的相同点和不同点,那我在这里简略的总结下: 1,不同点:like能够用作含糊查问,而'='不反对此性能;如上面的例子,查问info表中字段id第一个字母为1的数据:select * from info where id like '1%'; 2,相同点:like和"="都能够进行准确查问,比方上面的例子,从后果上看,都是查问info表中字段id等于'12345'的后果:select * from info where id like '12345';以上就是返回后果中,like和'='中的雷同和不同点。那好奇的小伙伴可能就要问了,那执行过程呢?mysql不论是遇到like还是'='时的执行过程也都是一样的么? 没错,事件不能只看外表,如果你仔细钻研,就会发现其实like和等于号'='并不是那么简略,上面咱们将具体的剖析他们两者的真正区别~~~注释首先,咱们来介绍一下mysql中的explain关键字;explain是执行打算的意思,即通过该命令查看这条sql是如何执行的。应用办法也很简略,即explain + sql语句,例如: explain select * from info where id like '12345';那咱们来应用explain测试一下like和=下的查问状况,首先咱们来测试一下为索引的字段: EXPLAIN SELECT * FROM crms_customer WHERE id = '7cf79d7c8a3a4f94b5373b3ec392e32d'; 而当初咱们把"="换成like试一下: EXPLAIN SELECT * FROM crms_customer WHERE id LIKE '7cf79d7c8a3a4f94b5373b3ec392e32d'; 小伙伴通过比照能够看到两条返回后果的type字段和Extra字段中的数据有所不同,那为什么不同,他们所代表的含意是什么呢? type字段type字段是一个可选值,这些值的性能从低到高的排序如下: type阐明SYSTEM零碎,表仅有一行(=零碎表)。这是const联接类型的一个特例CONST常量,表最多有一个匹配行,因为仅有一行,在这行的列值可被优化器残余局部认为是常数,const表很快,因为它们只读取一次EQ_REF搜寻时应用primary key 或 unique类型REF依据索引查找一个或多个值INDEX_MERGE合并索引,应用多个单列索引搜寻RANGE对索引列进行范畴查找index全索引表扫描ALL全数据表扫描依据表格能够显著看出,其中const是常量查找,而RANGE是对索引列进行范畴查找,所以性能也就很显著的体现了进去。 那应用like查问时,Extra字段代表什么呢?Extra字段中的Using where,又代表什么? Extra字段1,Extra字段是Explain输入中也很重要的列,所代表着MySQL查问优化器执行查问的过程中对查问打算的重要补充信息。2,Extra字段中的Using where意味着mysql服务器将在存储引擎检索行后再进行过滤。所以比起应用应用'='又多了一步查找过程。显然通过以上的总结咱们能够得出结论:当咱们应用索引字段进行条件查问时,'='的性能要比like快。 是不是认为到这里就完结了呢? 然而并没有 有的小伙伴该问了那非索引字段呢?对的,咱们上面持续测试非索引字段 EXPLAIN SELECT * FROM crms_customer WHERE customer_name = '张飞';----------------------------------- EXPLAIN SELECT * FROM crms_customer WHERE customer_name LIKE '张飞';除了"="和like同样的两条语句,让咱们运行一下:"=":like:能够看出当非索引字段时like和"="是一样的,性能上也没有差异。(当然,explain中还有很多其余字段,后续我会一一给小伙伴们解说的。) 论断通过咱们的不懈努力,能够失去论断:当like和"="在应用非索引字段查问时,他们的性能是一样的;而在应用索引字段时,因为"="是间接命中索引的,只读取一次,而like须要进行范畴查问,所以"="要比like性能好一些。~~~~

August 30, 2020 · 1 min · jiezi

关于mysql:NET-ORM-分表怎么做NET-ORM-分库怎么做

理论知识分表 - 从外表意思上看呢,就是把一张表分成N多个小表,每一个小表都是完正的一张表。分表后数据都是寄存在分表里,总表只是一个外壳,存取数据产生在一个一个的分表外面。分表后单表的并发能力进步了,磁盘I/O性能也进步了。并发能力为什么进步了呢,因为查寻一次所花的工夫变短了,如果呈现高并发的话,总表能够依据不同 的查问,将并发压力分到不同的小表外面。 分库 - 把本来存储于一个库的数据分块存储到多个库上,把本来存储于一个表的数据分块存储到多个表上。数据库中的数据量不肯定是可控的,在未进行分表分库的状况下,随着工夫和业务的倒退,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,一台服务器的资源(CPU、磁盘、内存、IO等)是无限的,最终数据库所能承载的数据量、数据处理能力都将遭逢瓶颈。 情怀满满分表、分库在 .NET 下堪称是老大难题,简略点能够应用相似 mycat 中间件,然而就 .NET 平台的本身生态,很不足相似 sharding-jdbc 这样弱小的轮子。 自己就本身无限的技术水平和教训,对分表、分库进行剖析,实现出自成一套的应用办法,尽管不极 sharding-jdbc 弱小,然而还算比拟通用、简略。但愿有朝一日呈现一批真正 .NET 大神,造出平凡的开源我的项目,实现你我心中的抱负。 这套分表、分库办法是建设在 .NET ORM FreeSql 之上做的,内容可能比拟形象,敬请体谅!后续会详解各种租户设计方案,除了按字段辨别租户,还包含分库、分表的计划,敬请关注! 入戏筹备FreeSql 是 .Net ORM,能反对 .NetFramework4.0+、.NetCore、Xamarin、XAUI、Blazor、以及还有说不出来的运行平台,因为代码绿色无依赖,反对新平台非常简单。目前单元测试数量:5000+,Nuget下载数量:180K+,源码简直每天都有提交。值得快乐的是 FreeSql 退出了 ncc 开源社区:https://github.com/dotnetcore/FreeSql,退出组织之后社区责任感更大,须要更致力做好品质,为开源社区出一份力。 QQ群:4336577(已满)、8578575(在线)、52508226(在线) 为什么要反复造轮子? FreeSql 次要劣势在于易用性上,根本是开箱即用,在不同数据库之间切换兼容性比拟好。作者花了大量的工夫精力在这个我的项目,肯请您花半小时理解下我的项目,谢谢。性能个性如下:反对 CodeFirst 比照构造变动迁徙;反对 DbFirst 从数据库导入实体类;反对 丰盛的表达式函数,自定义解析;反对 批量增加、批量更新、BulkCopy;反对 导航属性,贪心加载、延时加载、级联保留;反对 读写拆散、分表分库,租户设计;反对 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/达梦/神通/人大金仓/MsAccess;FreeSql 应用非常简单,【单机数据库】只须要定义一个 IFreeSql 对象即可: static IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.MySql, connectionString) .UseAutoSyncStructure(true) //主动同步实体构造到数据库 .Build(); //请务必定义成 Singleton 单例模式 ...

August 30, 2020 · 2 min · jiezi

关于mysql:NET-ORM-导航属性可以解决什么问题

写在结尾从最晚期入门时的单表操作, 到起初接触了 left join、right join、inner join 查问, 因为经费有限,须要一直在多表查问中折腾解决理论需要,不晓得是否有过这样的经验? 本文从理论开发需要解说导航属性(ManyToOne、OneToMany、ManyToMany)的设计思路,和到底解决了什么问题。提醒:以下示例代码应用了 FreeSql 语法,和一些伪代码。 入戏筹备FreeSql 是 .Net ORM,能反对 .NetFramework4.0+、.NetCore、Xamarin、XAUI、Blazor、以及还有说不出来的运行平台,因为代码绿色无依赖,反对新平台非常简单。目前单元测试数量:5000+,Nuget下载数量:180K+,源码简直每天都有提交。值得快乐的是 FreeSql 退出了 ncc 开源社区:https://github.com/dotnetcore/FreeSql,退出组织之后社区责任感更大,须要更致力做好品质,为开源社区出一份力。 QQ群:4336577(已满)、8578575(在线)、52508226(在线) 为什么要反复造轮子? FreeSql 次要劣势在于易用性上,根本是开箱即用,在不同数据库之间切换兼容性比拟好。作者花了大量的工夫精力在这个我的项目,肯请您花半小时理解下我的项目,谢谢。性能个性如下:反对 CodeFirst 比照构造变动迁徙;反对 DbFirst 从数据库导入实体类;反对 丰盛的表达式函数,自定义解析;反对 批量增加、批量更新、BulkCopy;反对 导航属性,贪心加载、延时加载、级联保留;反对 读写拆散、分表分库,租户设计;反对 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/达梦/神通/人大金仓/MsAccess;FreeSql 应用非常简单,只须要定义一个 IFreeSql 对象即可: static IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.MySql, connectionString) .UseAutoSyncStructure(true) //主动同步实体构造到数据库 .Build(); //请务必定义成 Singleton 单例模式ManyToOne 多对一left join、right join、inner join 从表的外键看来,次要是针对一对一、多对一的查问,比方 Topic、Type 两个表,一个 Topic 只能属于一个 Type: selecttopic.*, type.namefrom topicinner join type on type.id = topic.typeid查问 topic 把 type.name 一起返回,一个 type 能够对应 N 个 topic,对于 topic 来讲是 N对1,所以我命名为 ManyToOne ...

August 30, 2020 · 7 min · jiezi

关于mysql:MySQL安装

1.下载SQL官方网站当然我也提供了: 百度网盘链接提取码:m4gy 2.装置2.1 将下载的zip解压放到相应的中央,本例放到了C盘。2.2 创立零碎变量关上环境变量,抉择新建零碎变量 配置MYSQL_HOME变量名输出MYSQL_HOME 配置Path 点击新建按钮在文本框内输出%MYSQL_HOME%\bin 之后顺次点击确定 3. 编写配置文件my.ini在装置MySQL的根目录下创立my.txt文本文件并编辑以下文本 [mysqld]# 设置3306端口port=3306# 设置mysql的装置目录basedir=(删除括号内容包含括号 改为装置目录,例:C:\JavaDevelop\Tools\mysql-8.0.21-winx64)# 设置mysql数据库的数据的寄存目录datadir=(此处同上C:\JavaDevelop\Tools\mysql-8.0.21-winx64\Data 留神在门路后拼上 \Data)# 容许最大连接数max_connections=200# 容许连贯失败的次数。这是为了避免有人从该主机试图攻打数据库系统max_connect_errors=10# 服务端应用的字符集默认为UTF8character-set-server=utf8# 创立新表时将应用的默认存储引擎default-storage-engine=INNODB# 默认应用“mysql_native_password”插件认证default_authentication_plugin=mysql_native_password[mysql]# 设置mysql客户端默认字符集default-character-set=utf8[client]# 设置mysql客户端连贯服务端时默认应用的端口port=3306default-character-set=utf8保留文件后 将文件后缀改为.ini 4. 初始化数据库复制MySQL的bin目录门路 在DOS窗口输出 cd空格 粘贴上你复制的bin目录回车 之后输出以下代码:mysqld --initialize --console 运行胜利之后 切记!!!password is generated for root@localhost:之后的字符串为初始密码 咱们复制一份保存起来 5. 装置MySQL服务同样在cmd的bin门路下,输出如下代码:mysqld --install至此MySQL曾经装置胜利<hr/>咱们还须要启动MySQL服务 输出以下代码 net start mysql 更改明码:1. 先进入到mysql,输出下列代码,回车而后输出方才复制的明码mysql -u root -p 而后输出下列代码,本例把明码改成你想设置的明码(如‘123456’) ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; MySQL 装置实现

August 30, 2020 · 1 min · jiezi

关于mysql:mysql执行计划就这样5000字被解释的清清楚楚

上一次咱们 通过实际,解释了mysql主从复制的原理和实际,明天,咱们来看一下mysql的执行打算 在企业的利用场景中,为了晓得优化SQL语句的执行,须要查看SQL语句的具体执行过程,以放慢SQL语句的执行效率。 能够应用explain+SQL语句来模仿优化器执行SQL查问语句,从而晓得mysql是如何解决sql语句的。 1、执行打算中蕴含的信息ColumnMeaningidThe SELECT identifierselect_typeThe SELECT typetableThe table for the output rowpartitionsThe matching partitionstypeThe join typepossible_keysThe possible indexes to choosekeyThe index actually chosenkey_lenThe length of the chosen keyrefThe columns compared to the indexrowsEstimate of rows to be examinedfilteredPercentage of rows filtered by table conditionextraAdditional information id select查问的序列号,蕴含一组数字,示意查问中执行select子句或者操作表的程序 id号分为三种状况: 1、如果id雷同,那么执行程序从上到下 explain select * from emp e join dept d on e.deptno = d.deptno join salgrade sg on e.sal between sg.losal and sg.hisal;2、如果id不同,如果是子查问,id的序号会递增,id值越大优先级越高,越先被执行 explain select * from emp e where e.deptno in (select d.deptno from dept d where d.dname = 'SALES');3、id雷同和不同的,同时存在:雷同的能够认为是一组,从上往下程序执行,在所有组中,id值越大,优先级越高,越先执行 explain select * from emp e join dept d on e.deptno = d.deptno join salgrade sg on e.sal between sg.losal and sg.hisal where e.deptno in (select d.deptno from dept d where d.dname = 'SALES');select_type 次要用来分辨查问的类型,是一般查问还是联结查问还是子查问 ...

August 29, 2020 · 2 min · jiezi

关于mysql:MySQL存储引擎与适用场景详解

1 Isam在读取数据方面速度很快,而且不占用大量的内存和存储资源但不反对事务、外键、索引。MySQL≥5.1版本中不再反对。 2 Berkeley反对COMMIT和ROLLBACK等事务个性。 MySQL在 ≥ 5.1版本中不再反对。 3 CSV应用该引擎的MySQL数据库表会在MySQL装置目录data文件夹中的和该表所在数据库名雷同的目录中生成一个.CSV文件(所以,它能够将CSV类型的文件当做表进行解决),这种文件是一种一般文本文件,每个数据行占用一个文本行。 然而不反对索引,即应用该种类型的表没有主键列;也不容许表中的字段为null。csv的编码转换须要分外留神。 实用场景反对从数据库中拷入/拷出CSV文件。如果从电子表格软件输入一个CSV文件,将其寄存在MySQL服务器的数据目录中,服务器就可能马上读取相干的CSV文件。同样,如果写数据库到一个CSV表,内部程序也能够立即读取它。在实现某种类型的日志记录时,CSV表作为一种数据交换格局,特地有用。 4 MEMORY(亦称HEAP)在内存中创立长期表来存储数据。 出发点是速度 采纳的逻辑存储介质是内存。 每个基于该引擎的表理论对应一个磁盘文件,文件名和表名雷同,类型为.frm。磁盘文件只存储表构造,数据存储在内存,所以应用该种引擎的表领有极高插入、更新和查问效率。 默认应用哈希(Hash)索引,速度比应用B+Tree快,也可应用B+树索引。 因为这种存储引擎所存储的数据保留在内存中,无奈长久化!所以其保留的数据具备不稳定性,比方如果mysqld过程产生异样会造成这些数据的隐没,所以该存储引擎下的表的生命周期很短,个别只应用一次。 实用场景如果须要该数据库中一个用于查问的长期表。 5 BLACKHOLE - 黑洞引擎反对事务,而且反对mvcc的行级锁,写入这种引擎表中的任何数据都会隐没,次要用于做日志记录或同步归档的中继存储,该存储引擎除非有特地目标,否则不适宜应用。 实用场景1应用BLACKHOLE存储引擎的表不存储任何数据,但如果mysql启用了二进制日志,SQL语句被写入日志(并被复制到从服务器)。这样应用BLACKHOLE存储引擎的mysqld能够作为主从复制中的中继反复器或在其下面增加过滤器机制。例如,假如你的利用须要从服务器侧的过滤规定,但传输所有二进制日志数据到从服务器会导致较大的网络流量。在这种状况下,在主服务器主机上建设一个伪从服务器过程。 场景2: 如果配置一主多从的话,多个从服务器会在主服务器上别离开启本人绝对应的线程,执行binlogdump命令而且多个此类过程并不是共享的。为了防止因多个从服务器同时申请同样的事件而导致主机资源耗尽,能够独自建设一个伪的从服务器或者叫散发服务器。 ARCHIVE区别于InnoDB和MyISAM,ARCHIVE提供压缩性能,领有高效地插入。但不反对索引,所以查问性能较差。 反对insert、replace和select操作,不反对update和delete。 实用场景数据归档压缩比十分高,存储空间大略是innodb的10-15分之一,所以存储历史数据非常适合,因为不反对索引也不能缓存索引和数据,不适宜作为并发拜访表。 日志表因为高压缩和疾速插入的特点。但前提是不常常对该表进行查问。 PERFORMANCE_SCHEMA:该引擎次要用于收集数据库服务器性能参数。这种引擎提供以下性能:提供过程期待的详细信息,包含锁、互斥变量、文件信息;保留历史的事件汇总信息,为提供MySQL服务器性能做出具体的判断;对于新增和删除监控事件点都非常容易,并能够随便扭转mysql服务器的监控周期,例如(CYCLE、MICROSECOND)。 MySQL用户是不能创立存储引擎为PERFORMANCE_SCHEMA的表。 场景: DBA可能较明细得理解性能升高可能是因为哪些瓶颈。 MergeMerge容许将一组应用MyISAM存储引擎的并且表构造雷同(即每张表的字段程序、字段名称、字段类型、索引定义的程序及其定义的形式必须雷同)的数据表合并为一个表,不便了数据的查问。 场景:MySQL中没有物化视图,视图的效率极低,故数据仓库中数据量较大的每天、每周或者每个月都创立一个繁多的表的历史数据的汇合能够通过Merge存储引擎合并为一张表。 Federated该存储引擎能够不同的Mysql服务器联结起来,逻辑上组成一个残缺的数据库。这种存储引擎非常适合数据库分布式应用。Federated存储引擎能够使你在本地数据库中拜访近程数据库中的数据,针对federated存储引擎表的查问会被发送到近程数据库的表上执行,本地是不存储任何数据的。 场景: dblink。 毛病: 1.对本地虚构表的构造批改,并不会批改近程表的构造 2.truncate 命令,会革除近程表数据 drop命令只会删除虚构表,并不会删除近程表4.不反对 alter table 命令 select count(), select from limit M, N 等语句执行效率非常低,数据量较大时存在很重大的问题,然而按主键或索引列查问,则很快,如以下查问就十分慢(假如 id 为主索引)select id from db.tablea where id >100 limit 10 ; ...

August 28, 2020 · 1 min · jiezi

关于mysql:MySQL-redo与undo日志解析

前言: 后面文章讲述了 MySQL 零碎中常见的几种日志,其实还有事务相干日志 redo log 和 undo log 没有介绍。绝对于其余几种日志而言, redo log 和 undo log 是更加神秘,难以观测的。本篇文章将次要介绍这两类事务日志的作用及运维办法。 1.重做日志(redo log)咱们都晓得,事务的四大个性外面有一个是 持久性 ,具体来说就是只有事务提交胜利,那么对数据库做的批改就被永恒保留下来了,不可能因为任何起因再回到原来的状态。那么 MySQL 是如何保障一致性的呢?最简略的做法是在每次事务提交的时候,将该事务波及批改的数据页全副刷新到磁盘中。然而这么做会有重大的性能问题,次要体现在两个方面: 因为 Innodb 是以页为单位进行磁盘交互的,而一个事务很可能只批改一个数据页外面的几个字节,这个时候将残缺的数据页刷到磁盘的话,太浪费资源了。一个事务可能波及批改多个数据页,并且这些数据页在物理上并不间断,应用随机 IO 写入性能太差。因而 MySQL 设计了 redo log ,具体来说就是只记录事务对数据页做了哪些批改,这样就能完满地解决性能问题了(相对而言文件更小并且是程序IO)。 redo log 包含两局部:一个是内存中的日志缓冲(redo log buffer),另一个是磁盘上的日志文件(redo log file)。MySQL 每执行一条 DML 语句,先将记录写入 redo log buffer ,后续某个工夫点再一次性将多个操作记录写到 redo log file 。 默认状况下,redo log 在磁盘上由名为 ib_logfile0 和 ib_logfile1 的两个物理文件展现。redo log 相干参数简略介绍如下: innodb_log_files_in_group:redo log 文件的个数,命名形式如:ib_logfile0,iblogfile1... iblogfilen。默认2个,最大100个。innodb_log_file_size:单个 redo log 文件设置大小,默认值为 48M,最大值为512G,留神最大值指的是整个 redo log 系列文件之和,即(innodb_log_files_in_group * innodb_log_file_size )不能大于最大值512G。innodb_log_group_home_dir:指定 redo log 文件组所在的门路,默认./ ,示意在数据库的数据目录下。innodb_log_buffer_size:redo log buffer 大小,默认16M。提早事务日志写入磁盘,把 redo log 放到该缓冲区,而后依据 innodb_flush_log_at_trx_commit 参数的设置,再把日志从 buffer 中 flush 到磁盘中。innodb_flush_log_at_trx_commit:管制 redo log 刷新到磁盘的策略,默认为1。值为1,每次 commit 都会把 redo log 从 redo log buffer 写入到 system ,并 fsync 刷新到磁盘文件中。值为2,每次事务提交时 MySQL 会把日志从 redo log buffer 写入到 system ,但只写入到 file system buffer,由零碎外部来 fsync 到磁盘文件。如果数据库实例 crash ,不会失落 redo log,然而如果服务器 crash,因为 file system buffer 还来不及 fsync 到磁盘文件,所以会失落这一部分的数据。值为0,示意事务提交时不进行写入 redo log 操作,这个操作仅在 master thread 中实现,而在 master thread 中每1秒进行一次重做日志的 fsync 操作,因而实例 crash 最多失落1秒钟内的事务。更改 redo log 及其 buffer 大小是须要重启数据库实例的,倡议初始化时做好评估。能够适当加大 redo log 组数和大小,特地是你的数据库实例更新比拟频繁的状况下。但也不举荐 redo log 设置过大。 ...

August 28, 2020 · 2 min · jiezi

关于mysql:mysql主从复制从原理讲到安装配置全干货

0、为什么须要主从复制?1、在业务简单的零碎中,有这么一个情景,有一句sql语句须要锁表,导致临时不能应用读的服务,那么就很影响运行中的业务,应用主从复制,让主库负责写,从库负责读,这样,即便主库呈现了锁表的情景,通过读从库也能够保障业务的失常运作。 2、做数据的热备 3、架构的扩大。业务量越来越大,I/O拜访频率过高,单机无奈满足,此时做多库的存储,升高磁盘I/O拜访的频率,进步单个机器的I/O性能。 1、什么是mysql的主从复制?MySQL 主从复制是指数据能够从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采纳异步复制形式,这样从节点不必始终拜访主服务器来更新本人的数据,数据的更新能够在近程连贯上进行,从节点能够复制主数据库中的所有数据库或者特定的数据库,或者特定的表。 2、mysql复制原理原理:(1)master服务器将数据的扭转记录二进制binlog日志,当master上的数据产生扭转时,则将其扭转写入二进制日志中; (2)slave服务器会在肯定工夫距离内对master二进制日志进行探测其是否产生扭转,如果产生扭转,则开始一个I/OThread申请master二进制事件 (3)同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保留至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最初I/OThread和SQLThread将进入睡眠状态,期待下一次被唤醒。 也就是说:从库会生成两个线程,一个I/O线程,一个SQL线程;I/O线程会去申请主库的binlog,并将失去的binlog写到本地的relay-log(中继日志)文件中;主库会生成一个log dump线程,用来给从库I/O线程传binlog;SQL线程,会读取relay log文件中的日志,并解析成sql语句逐个执行;留神:1--master将操作语句记录到binlog日志中,而后授予slave近程连贯的权限(master肯定要开启binlog二进制日志性能;通常为了数据安全思考,slave也开启binlog性能)。 2--slave开启两个线程:IO线程和SQL线程。其中:IO线程负责读取master的binlog内容到中继日志relay log里;SQL线程负责从relay log日志里读出binlog内容,并更新到slave的数据库里,这样就能保障slave数据和master数据保持一致了。 3--Mysql复制至多须要两个Mysql的服务,当然Mysql服务能够散布在不同的服务器上,也能够在一台服务器上启动多个服务。 4--Mysql复制最好确保master和slave服务器上的Mysql版本雷同(如果不能满足版本统一,那么要保障master主节点的版本低于slave从节点的版本) 5--master和slave两节点间工夫需同步 具体步骤:1、从库通过手工执行change master to 语句连贯主库,提供了连贯的用户所有条件(user 、password、port、ip),并且让从库晓得,二进制日志的终点地位(file名 position 号); start slave 2、从库的IO线程和主库的dump线程建设连贯。 3、从库依据change master to 语句提供的file名和position号,IO线程向主库发动binlog的申请。 4、主库dump线程依据从库的申请,将本地binlog以events的形式发给从库IO线程。 5、从库IO线程接管binlog events,并存放到本地relay-log中,传送过去的信息,会记录到master.info中 6、从库SQL线程利用relay-log,并且把利用过的记录到relay-log.info中,默认状况下,曾经利用过的relay 会主动被清理purge mysql主从复制装置配置1、根底设置筹备操作系统:centos6.5 mysql版本:5.7 两台虚拟机:node1:192.168.85.11(主) node2:192.168.85.12(从) 2、装置mysql数据库具体装置和卸载的步骤参考对应的文档3、在两台数据库中别离创立数据库--留神两台必须全副执行 create database msb; 4、在主(node1)服务器进行如下配置:批改配置文件,执行以下命令关上mysql配置文件vi /etc/my.cnf 在mysqld模块中增加如下配置信息log-bin=master-bin #二进制文件名称 binlog-format=ROW  #二进制日志格局,有row、statement、mixed三种格局,row指的是把扭转的内容复制过来,而不是把命令在从服务器上执行一遍,statement指的是在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采纳基于语句的复制,效率比拟高。mixed指的是默认采纳基于语句的复制,一旦发现基于语句的无奈准确的复制时,就会采纳基于行的复制。 server-id=1   #要求各个服务器的id必须不一样 binlog-do-db=msb   #同步的数据库名称 5、配置从服务器登录主服务器的账号受权--受权操作 set global validate_password_policy=0; set global validate_password_length=1; grant replication slave on *.* to 'root'@'%' identified by '123456'; --刷新权限 flush privileges; ...

August 27, 2020 · 1 min · jiezi

关于mysql:问题定位-Peronca-Xtrabackup-80近日踩坑总结-xtrabackup-24和80区别

前言近期在给 radondb/xenon 适配 percona xtrabackup 8.0时,遇到了一些问题,通过多日调研、尝试终于解决,特此分享。 版本信息: Percona-Server 8.0.19-10Percona-Xtrabackup 8.0.13版本各字段含意参考 https://www.percona.com/blog/... 适配过程中遇到的坑一、MySQL 8.0 + Semi-Sync + 继续写入数据期间执行重建后,change master to && start slave 报错: Last_Error: Could not execute Write_rows event on table db1.t1; Duplicate entry '28646' for key 't1.PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.000052, end_log_pos 437二、MySQL 8.0 + Group Replication + 继续写入数据期间执行重建后,change master to && start group_replication 报错: 2020-08-21T14:51:09.977606+08:00 61 [System] [MY-010597] [Repl] 'CHANGE MASTER TO FOR CHANNEL 'group_replication_applier' executed'. Previous state master_host='<NULL>', master_port= 0, master_log_file='', master_log_pos= 4, master_bind=''. New state master_host='<NULL>', master_port= 0, master_log_file='', master_log_pos= 4, master_bind=''.2020-08-21T14:51:09.987494+08:00 61 [ERROR] [MY-013124] [Repl] Slave SQL for channel 'group_replication_applier': Slave failed to initialize relay log info structure from the repository, Error_code: MY-0131242020-08-21T14:51:09.987542+08:00 61 [ERROR] [MY-011534] [Repl] Plugin group_replication reported: 'Error while starting the group replication applier thread'2020-08-21T14:51:09.987651+08:00 7 [ERROR] [MY-011669] [Repl] Plugin group_replication reported: 'Unable to initialize the Group Replication applier module.'2020-08-21T14:51:09.987831+08:00 7 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] The member is leaving a group without being on one.'要解释这个问题,首先要弄清楚xtrabackup 2.4和8.0的区别。 ...

August 27, 2020 · 6 min · jiezi

关于mysql:股票-基金-大盘-历史行情数据批量在线下载Excel随用随下

1.填写须要的股票代码,例如万科A或者000002都行,不要带sz、sh。一行一个,填完一个代码之后换行再填,就能一次取得多个股票的历史数据。 2.填写收数据的邮箱,股票数据下载生成好之后,会间接把数据发送至您的邮箱。请肯定留神不要填错邮箱啦,因为填错邮箱收不到数据的真的很多(而且也没方法挺醒你从新填,邮箱不通,后盾只能给48小时内给我发过音讯的用户发信息)。因为是收费数据,所以获取的人比拟多,基本上须要5分钟左右能收到数据,心愿了解。 一次获取多个股票的历史数据:股票历史数据是从股票上市开始,到最近一个交易日的数据,比方从1991年开始,有7000+多条数据 放在公主号下载也实属无奈,心愿大家体谅(不然很容易被歹意下载),下载是很不便的,在公主号里进行1、2两个步骤就能够了,个别5分钟就能收到数据。 之所以不是间接搜代码、点击就在线下载的形式,是因为在线下载很容易被有限歹意下载,十分影响失常用户的下载,失常用户基本挤不过歹意下载的所以起初为了屏蔽掉这些歹意下载,就设置了通过公主号提交、邮件发送的形式。 就是因为在线下载容易被攻打、歹意下载,所以最初抉择了放在公主号,这样的话要攻打也是先攻打微信,应该还没有谁有这么大的本事,所以这种办法一是收费,二是能短暂,还心愿大家能了解 当初基本上都没有在线下载的了,能找到的那些在线下载的也都是免费的,不信你找一圈还得回来。 以前是很多券商都能下载股票历史数据的,缓缓的也不晓得咋的,都加限度或者勾销了,就变得很麻烦。想要下载个数据还要下载软件、装置、摸索、注册,这一套下来还不晓得能不能下载。 另外懂代码的话,能够参考一下本人实现: import reimport pandasimport requestsurl = '指标网站的url' # 这里不写具体网站的链接了,大体做法都是一样的。response = requests.get(url).text # 失去网页的源代码###上面是解析收盘数据的代码,大部分都能够这么参考,简略的正则表达式###times = re.findall('class="first left bold noWrap">(.*?)</td>').group(1) # 获取到所有历史的交易工夫open_price = re.findall('class="first left bold noWrap">.*?</td>\s+<td data-real-value="(.*?)"').group(1) # 失去所有历史开盘价数据close_price = re.findall('class="first left bold noWrap">.*?</td>\s+<td.*?</td>\s+<td data-real-value="(.*?)">').group(1) # 失去所有历史收盘价数据high_price = re.findall('class="first left bold noWrap">.*?</td>\s+<td.*?</td>\s+<td.*?</td>\s+<td data-real-value="(.*?)">').group(1) # 失去所有历史收盘价数据###上面是数据下载老本地数据局部,以下载为本地Excel为例###df = pandas.DataFrame(a, columns=['open_price', 'close_price', 'vol']) # 把数据转成DataFrame格局wt = ExcelWriter(path) # path 是文件的保留门路,要准确到文件名。数据下载老本地数据之后,就要到这个门路去找。例如:C:\\Users\\Administrator\\Desktop\\股票所有历史收盘数据下载老本地数据.xls 就依照这个门路找到保留好的Excel就行了df.to_excel(wt, sheet_name='如何下载股票的历史收盘价' , index=False)转载自:https://blog.csdn.net/huifaguang/article/details/108247993 ...

August 26, 2020 · 1 min · jiezi

关于mysql:技术分享-MySQL-复制那点事-SecondsbehindMaster-参数调查笔记

作者:戴骏贤网易游戏 技术部资深数据库系统工程师。本文起源:原创投稿*爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。文章浏览工夫约 15 分钟,文中驰名参考文献在文末处有参考链接。1. 问题背景部门以后的数据库架构是 双主模式,既线上由 2 台互为主从的数据库搭建而成的集群。高可用通过 vip 和 headbeat 来做保障。通常状况下,vip 挂在主(本文称之为 da)上,当 da 产生了异样比方宕机等问题的时候,vip 主动漂移至从(本文称之为 dp)。架构如下图所示: 能够看出,所有的写入和读取操作都在 da 上进行。da 产生的 binlog 会被 dp 拉取重放。同时 dp 也会产生 binlog 并被 da 拉取重放(注:这里不会产生循环复制(既 da 产生的 binlog 事件在 dp 执行过了之后,再被 da 读取到再执行),因为 binlog 中每个 event 都有 serverid 标记,标记是哪个 server 产生的事物。当 da 读取到 binlog 的时候,发现 serverid 和本机的 serverid 统一,便会跳过以后的 binlog event)。失常状况下,da 的 Seconds_behind_Master 参数,应该放弃在 0 或者很小的数值才对。然而监控零碎发现,da 的 Seconds_behind_Master 参数常常产生跳变,上一秒为 0 下一秒就可能为一个很大值(比方 10000)。例如上面的数据,是通过脚本抓取到的线上 Seconds_behind_Master 状况: ...

August 26, 2020 · 15 min · jiezi

关于mysql:MySQL主从复制读写分离看这篇就够了

简介: 什么是主从复制,如何实现读写拆散,看这篇你就懂了! 思维导图 文章已收录到我的Github精选,欢送Star:https://github.com/yehongzhi/learningSummary前言在很多我的项目,特地是互联网我的项目,在应用MySQL时都会采纳主从复制、读写拆散的架构。 为什么要采纳主从复制读写拆散的架构?如何实现?有什么毛病?让咱们带着这些问题开始这段学习之旅吧! 为什么应用主从复制、读写拆散主从复制、读写拆散个别是一起应用的。目标很简略,就是为了进步数据库的并发性能。你想,假如是单机,读写都在一台MySQL下面实现,性能必定不高。如果有三台MySQL,一台mater只负责写操作,两台salve只负责读操作,性能不就能大大提高了吗? 所以主从复制、读写拆散就是为了数据库能反对更大的并发。 随着业务量的扩大、如果是单机部署的MySQL,会导致I/O频率过高。采纳主从复制、读写拆散能够进步数据库的可用性。 主从复制的原理①当Master节点进行insert、update、delete操作时,会按程序写入到binlog中。 ②salve从库连贯master主库,Master有多少个slave就会创立多少个binlog dump线程。 ③当Master节点的binlog发生变化时,binlog dump 线程会告诉所有的salve节点,并将相应的binlog内容推送给slave节点。 ④I/O线程接管到 binlog 内容后,将内容写入到本地的 relay-log。 ⑤SQL线程读取I/O线程写入的relay-log,并且依据 relay-log 的内容对从数据库做对应的操作。 如何实现主从复制我这里用三台虚拟机(Linux)演示,IP别离是104(Master),106(Slave),107(Slave)。 预期的成果是一主二从,如下图所示: Master配置应用命令行进入mysql: mysql -u root -p接着输出root用户的明码(明码遗记的话就网上查一下重置明码吧~),而后创立用户: //192.168.0.106是slave从机的IPGRANT REPLICATION SLAVE ON *.* to 'root'@'192.168.0.106' identified by 'Java@1234';//192.168.0.107是slave从机的IPGRANT REPLICATION SLAVE ON *.* to 'root'@'192.168.0.107' identified by 'Java@1234';//刷新零碎权限表的配置FLUSH PRIVILEGES;创立的这两个用户在配置slave从机时要用到。 接下来在找到mysql的配置文件/etc/my.cnf,减少以下配置: # 开启binloglog-bin=mysql-binserver-id=104# 须要同步的数据库,如果不配置则同步全副数据库binlog-do-db=test_db# binlog日志保留的天数,革除超过10天的日志# 避免日志文件过大,导致磁盘空间有余expire-logs-days=10 配置实现后,重启mysql: service mysql restart能够通过命令行show master status\G;查看以后binlog日志的信息(前面有用): Slave配置Slave配置绝对简略一点。从机必定也是一台MySQL服务器,所以和Master一样,找到/etc/my.cnf配置文件,减少以下配置: # 不要和其余mysql服务id反复即可server-id=106接着应用命令行登录到mysql服务器: ...

August 26, 2020 · 2 min · jiezi

关于mysql:Macat数据库中间件入门

一.什么是数据切分指通过某种特定的条件,将咱们寄存在同一个数据库中的数据扩散存放到多个数据库(主机)下面,以达到扩散单台设施负载的成果。 数据切分个别分为两种:垂直切分和程度切分。 二.垂直切分依照应用程序功能模块来分多个数据库,就是垂直拆分。 长处:◆ 数据库的拆分简单明了,拆分规定明确; ◆ 利用程序模块清晰明确,较为简单,整合容易; ◆ 数据保护不便,容易定位 毛病:◆ 局部表关联无奈在数据库级别实现,须要在程序中实现,存在跨库join的问题。对于这类的表,就须要去做取舍,是数据库退让业务,共用一个数据源,还是分成多个库,业务之间通过接口来做调用解决;初期数据量比拟少,或者资源无限的状况下,会抉择共用数据源,然而当数据倒退到了肯定的规模,负载很大的状况,就须要必须去做宰割。 ◆ 对于拜访极其频繁且数据量超大的表依然存在性能瓶颈,不肯定能满足要求; ◆ 事务处理绝对更为简单; ◆ 切分达到肯定水平之后,扩展性会遇到限度; ◆ 过多切分可能会带来零碎适度简单而保护艰难。 三.程度拆分为了解决垂直拆分带来的问题,(一般来说是基于解决超大表性能瓶颈问题,查问很慢,读写拆散模式只有一台主机,若遇到高并发插入,一台主机承受不住压力),引入了程度拆分。 程度拆分不是将表做分类,而是依照某个字段的某种规定来扩散到多个库之中,每个表中蕴含一部分数据。简略来说,数据的程度切分了解为是依照数据记录行来切分,将表中的某些行切分到一个数据库,而另外的某些行又切分到其余的数据库中,也就是俗称分库分表。 程度切分的长处 ◆ 表关联根本可能在数据库端全副实现;----不须要通过应用程序来关联表查问合并 ◆ 不会存在某些超大型数据量和高负载的表遇到瓶颈的问题;----分多库多表则不论是查问还是插入都不存在性能瓶颈问题 ◆ 事务处理绝对简略; ◆ 应用程序端整体架构改变绝对较少;----对程序根本通明 程度切分的毛病 ◆ 切分规定绝对更为简单,很难形象出一个可能满足整个数据库的切分规定; ◆ 前期数据的保护难度有所增加,人为手工定位数据更艰难; ◆ 利用零碎各模块耦合度较高,可能会对前面数据的迁徙拆分造成肯定的艰难。 ◆ 跨节点合并排序分页问题 ◆ 多数据源治理问题 四.Mycat简介Mycat是一个数据库代理,MySQL、SQL Server、Oracle、DB2、PostgreSQL等支流数据库,也反对MongoDB这种新型NoSQL形式的存储 Mycat并不存储数据,只做数据路由,咱们也能够简略认为Mycat就是数据库中间件。 它拦挡了用户发送过去的SQL语句,首先对SQL语句做了一些特定的剖析:如分片剖析、路由剖析、读写拆散剖析、缓存剖析等,而后将此SQL发往后端的实在数据库,并将返回的后果做适当的解决,最终再返回给用户。 五.Mycat重要概念 逻辑库(schema):存在在mycat外面的虚构库 逻辑表(table):存在在mycat外面的虚构表 分片表:分片表,是指那些原有的很大数据的表,须要切分到多个数据库的表,这样,每个分片都有一部分数据,所有分片形成了残缺的数据 非分片表:不须要进行数据切分的表 ER表:子表的记录与所关联的父表记录寄存在同一个数据分片上,即子表依赖于父表,通过表分组(Table Group)保证数据Join不会跨库操作。 表分组(Table Group):是解决跨分片数据join的一种很好的思路,也是数据切分布局的重要一条规定 全局表:例如字典表,每一个数据分片节点上有保留了一份字典表数据数据冗余是解决跨分片数据join的一种很好的思路,也是数据切分布局的另外一条重要规定 分片节点(dataNode):数据切分后,一个大表被分到不同的分片数据库下面,每个表分片所在的数据库就是分片节点 节点主机(dataHost):数据切分后,每个分片节点(dataNode)不肯定都会独占一台机器,同一机器下面能够有多个分片数据库,这样一个或多个分片节点(dataNode)所在的机器就是节点主机(dataHost),为了躲避单节点主机并发数限度,尽量将读写压力高的分片节点(dataNode)平衡的放在不同的节点主机(dataHost) 分片规定(rule):后面讲了数据切分,一个大表被分成若干个分片表,就须要肯定的规定,这样依照某种业务规定把数据分到某个分片的规定就是分片规定,数据切分抉择适合的分片规定十分重要,将极大的防止后续数据处理的难度。 全局序列号(sequence):数据切分后,原有的关系数据库中的主键束缚在分布式条件下将无奈应用,因而须要引入内部机制保证数据唯一性标识,这种保障全局性的数据惟一标识的机制就是全局序列号(sequence)。 上述基本概念后续再看案例介绍

August 25, 2020 · 1 min · jiezi

关于mysql:Python连接Docker中的MySQL报错解决方案

应用Python或者用mysql命令在宿主机中连贯Docker中的MySQL报如下谬误Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory") 首先,在docker容器内应用mysql -u root -p能够拜访,在宿主机不能够在宿主机加上protocol参数之后,应用mysql -u spok --protocol=tcp -p能够拜访要让Python程序也应用tcp协定,把address参数中的localhost改为127.0.0.1。 address = mysql+mysqldb://root:12345678@127.0.0.1:3306/test

August 25, 2020 · 1 min · jiezi

关于mysql:享学MySQL系列深入理解MySQL中的事务超详细配图版

@[TOC] 1 引言想必加入过后盾开发面试的搭档们都晓得,MySQL事务这玩意是各大面试官百问不厌的知识点,然而大家对于事务的理解到什么层面呢,仅仅停留在ACID上么,这篇文章将陪着大家一起深刻MySQL中的事务。 2 事务的个性引言中所提到的ACID正是事务的四个个性:别离是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability) 原子性(Atomicity):事务作为一个整体被执行,蕴含在其中的对数据库的操作要么全副被执行,要么都不执行。一致性(Consistency):事务应确保数据库的状态从一个统一状态转变为另一个统一状态。统一状态的含意是数据库中的数据应满足完整性束缚。隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其余事务的执行。持久性(Durability):已被提交的事务对数据库的批改应该永恒保留在数据库中。其中一致性不太好了解,一致性是说无论事务提交还是回滚,不会毁坏数据的完整性。比方A给B转100元,如果胜利了,A的账户必然会扣100元,而B的账户必定会减少100元;如果失败了,A和B的账户余额不会扭转。A和B中的账户金额变动必然是一个残缺的过程(不可能是A扣除了50,B减少了50这种状况),整个过程必须是统一的。 2.1 原子性事务的原子性是指:一个事务中的多个操作都是不可分割的,只能是全副执行胜利、或者全副执行失败。MySQL事务的原子性是通过undo log来实现的。undo log是InnoDB存储引擎特有的。具体的实现机制是:将所有对数据的批改(增、删、改)都写入日志(undo log)。 <font color="#E96900">undo log是逻辑日志,能够了解为:记录和事务操作相同的SQL语句,事务执行insert语句,undo log就记录delete语句。它以追加写的形式记录日志,不会笼罩之前的日志。除此之外undo log还用来实现数据库多版本并发管制(Multiversion Concurrency Control,简称MVCC)。</font>如果一个事务中的一部分操作曾经胜利,但另一部分操作,因为断电/零碎解体/其它的软硬件谬误而无奈胜利执行,则通过回溯日志,将曾经执行胜利的操作撤销,从而达到全副操作失败的目标。 2.2 持久性事务的持久性是指:一个事务对数据的所有批改,都会永恒的保留在数据库中。MySQL事务的持久性是通过redo log来实现的。redo log也是InnoDB存储引擎特有的。具体实现机制是:当产生数据批改(增、删、改)的时候,InnoDB引擎会先将记录写到redo log中,并更新内存,此时更新就算实现了。同时InnoDB引擎会在适合的机会将记录刷到磁盘中。<font color="#E96900">redo log是物理日志,记录的是在某个数据页做了什么批改,而不是SQL语句的模式。它有固定大小,是循环写的形式记录日志,空间用完后会笼罩之前的日志。</font> undo log和redo log并不是间接写到磁盘上的,而是先写入log buffer。再期待适合的机会同步到OS buffer,再由操作系统决定何时刷到磁盘,具体过程如下:既然undo log和redo log都是从log buffer 到 OS buffer,再到磁盘。所以中途还是有可能因为断电/硬件故障等起因导致日志失落。为此MySQL提供了三种长久化形式:这里有一个参数innodb_flush_log_at_trx_commit,这个参数次要管制InnoDB将log buffer中的数据写入OS buffer,并刷到磁盘的工夫点,取值别离为0,1,2,默认是1。这三个值的意思如下图所示:首先查看MySQL默认设置的形式1,也就是每次提交后间接写入OS buffer,并且调用零碎函数fsync()把日志写到磁盘上。就保证数据一致性的角度来说,这种形式无疑是最平安的。然而咱们都晓得,平安大多数时候意味着效率偏低。每次提交都间接写入OS buffer并且写到磁盘,无疑会导致单位工夫内IO的次数过多而效率低下。除此之外,还有形式0和形式2。基本上都是每秒写入磁盘一次,所以效率都比形式1更高。然而形式0是把数据先写入log buffer再写入OS buffer再写入磁盘,而形式2是间接写入OS buffer,再写入磁盘,少了一次数据拷贝的过程(从log buffer到OS buffer),所以形式2比形式0更加高效。 理解了undo log和redo log的作用和实现机制之后,那么这两个日志具体是怎么让数据库从异样的状态复原到失常状态的呢?<font color="#E96900">数据库系统解体后重启,此时数据库处于不统一的状态,必须先执行一个crash recovery的过程:首先读取redo log,把胜利提交然而还没来得及写入磁盘的数据从新写入磁盘,保障了持久性。再读取undo log将还没有胜利提交的事务进行回滚,保障了原子性。crash recovery完结后,数据库复原到一致性状态,能够持续被应用。</font> 2.3 隔离性数据库事务的隔离性是指:多个事务并发执行时,一个事务的执行不应影响其余事务的执行。失常状况下,必定是多个事务同时操作同一个数据库,所以事务之间的隔离就显得必不可少。如果没有隔离性,将会产生以下问题: 2.3.1 第一类失落更新一个事务在撤销的时候,笼罩了另一个事务已提交的更新数据。假如当初有两个事务A、B同时操作同一账户的金额,如下图所示:显然,事务B在撤销事务的时候,笼罩了事务A在T4阶段曾经提交的更新数据。A在T3的时候曾经取走了200元,此时的余额应该是800元,然而因为事务B开始的时候,余额是1000元,所以回滚后,余额也会变成1000元。这样一来,用户明明取了钱,然而余额不变,银行亏到姥姥家了。 2.3.2 脏读一个事务读到了另一个事务未提交的更新数据。用下图阐明:事务A在T3的时候取走了200元,然而未提交。事务B在T4时查问余额就能看到事务A未提交的更新。 2.3.3 幻读幻读(虚读)是指:一个事务读到了另一个事务已提交的新增数据。仍然是配图阐明:事务B在同一个事务中执行两次统计操作之间,另一事务insert了一条记录,导致失去的后果不一样,如同产生了幻觉。还有一种状况是事务B更新了表中所有记录的某一字段,之后事务A又插入了一条记录,事务B再去查问发现有一条记录没有被更新,这也是幻读。 2.3.4 不可反复读不可反复读:一个事务读到了另一个事务已提交的更新数据。不可反复读,顾名思义,就是在同一个事务中反复读取数据会产生不统一的状况,如下图:事务B在T2和T5阶段都执行了查问余额的操作,然而每次失去的后果都不一样,这在开发中是不容许的,同一个事务中同样的屡次查问,每次返回不一样的后果,让人未免会对数据库的可靠性产生狐疑。 2.3.5 第二类失落更新一个事务在提交的时候,笼罩了另一个事务已提交的更新数据。由上图能够看出,当事务A提交之后,账户余额曾经产生了变动,而后事务B还是基于原始金额(即1000)的根底上扣除取款金额的,事务B以提交,就是把事务A的提交给齐全笼罩了。此为第二类失落更新。 留神和第一类失落更新辨别,第一类失落更新重点在事务B最终撤销了事务,第二类是最终提交了事务。为了解决这五类问题,MySQL提供了四种隔离级别: Serializable(串行化):事务之间以一种串行的形式执行,安全性十分高,效率低Repeatable Read(可反复读):是MySQL默认的隔离级别,同一个事务中雷同的查问会看到同样的数据行,安全性较高,效率较好Read Commited(读已提交):一个事务能够读到另一个事务曾经提交的数据,安全性较低,效率较高Read Uncommited(读未提交):一个事务能够读到另一个事务未提交的数据,安全性低,效率高隔离级别是否呈现第一类失落更新是否呈现脏读是否呈现虚读是否呈现不可反复读是否呈现第二类失落更新Serializable否否否否否Repeatable Read否否是否否Read Commited否否是是是Read Uncommited否是是是是3 Repeatable ReadRepeatable Read(可反复读)是MySQL默认的隔离级别,也是应用最多的隔离级别,所以独自拿进去深刻了解很有必要。Repeatable Read无奈解决幻读(虚读)问题。上面来看一个实例。首先创立一个表并插入一条记录: ...

August 25, 2020 · 2 min · jiezi

关于mysql:MySQL-日期时间类型怎么选千万不要乱用

作者:zhuzhichao 链接:https://learnku.com/laravel/t... 构建数据库写程序防止不了应用日期和工夫,对于数据库来说,有多种日期工夫字段可供选择,如 timestamp 和 datetime 以及应用 int 来存储 unix timestamp。 不仅老手,包含一些有教训的程序员还是比拟迷茫,到底我该用哪种类型来存储日期工夫呢? 那咱们就一步一步来剖析他们的特点,这样咱们依据本人的需要抉择适合的字段类型来存储 (长处和毛病是比拟进去的  , 跟父母从小喜爱拿街坊小孩子跟本人比一样的) datetime 和 timestampdatetime 更像日历下面的工夫和你手表的工夫的联合,就是指具体某个工夫。 timestamp 更适宜来记录时间,比方我在东八区工夫当初是 2016-08-02 10:35:52, 你在日本(东九区此时工夫为 2016-08-02 11:35:52),我和你在聊天,数据库记录了工夫,取出来之后,对于我来说工夫是 2016-08-02 10:35:52,对于日本的你来说就是 2016-08-02 11:35:52。所以就不必思考时区的计算了。 工夫范畴是 timestamp 硬伤(1970-2038),当然 datetime (1000-9999)也记录不了刘备什么时候出世(161 年)。 timestamp 和 UNIX timestamp显示直观,出问题了便于排错,比好多很长的 int 数字难看多了 int 是从 1970 年开始累加的,然而 int 反对的范畴是 1901-12-13 到 2038-01-19 03:14:07,如果须要更大的范畴须要设置为 bigInt。然而这个工夫不蕴含毫秒,如果须要毫秒,还须要定义为浮点数。datetime 和 timestamp 原生自带 6 位的微秒。 timestamp 是自带时区转换的,同下面的第 2 项。 用户前端输出的工夫个别都是日期类型,如果存储 int 还须要存前取后处理 ...

August 24, 2020 · 1 min · jiezi

关于mysql:MySQL学习笔记6-数据库的设计备份还原

多表之间的关系1. 分类:1. 一对一(理解): * 如:人和身份证 * 剖析:一个人只有一个身份证,一个身份证只能对应一个人2. 一对多(多对一): * 如:部门和员工 * 剖析:一个部门有多个员工,一个员工只能对应一个部门3. 多对多: * 如:学生和课程 * 剖析:一个学生能够抉择很多门课程,一个课程也能够被很多学生抉择2. 实现关系:1. 一对多(多对一): * 如:部门和员工 * 实现形式:在多的一方建设外键,指向一的一方的主键。2. 多对多: * 如:学生和课程 * 实现形式:多对多关系实现须要借助第三张两头表。两头表至多蕴含两个字段,这两个字段作为第三张表的外键,别离指向两张表的主键3. 一对一(理解): * 如:人和身份证 * 实现形式:一对一关系实现,能够在任意一方增加惟一外键指向另一方的主键。3. 案例 -- 创立游览线路分类表 tab_category -- cid 游览线路分类主键,主动增长 -- cname 游览线路分类名称非空,惟一,字符串 100 CREATE TABLE tab_category ( cid INT PRIMARY KEY AUTO_INCREMENT, cname VARCHAR(100) NOT NULL UNIQUE ); -- 创立游览线路表 tab_route /* rid 游览线路主键,主动增长 rname 游览线路名称非空,惟一,字符串 100 price 价格 rdate 上架工夫,日期类型 cid 外键,所属分类 */ CREATE TABLE tab_route( rid INT PRIMARY KEY AUTO_INCREMENT, rname VARCHAR(100) NOT NULL UNIQUE, price DOUBLE, rdate DATE, cid INT, FOREIGN KEY (cid) REFERENCES tab_category(cid) #没有constraint 外键名称 ——因为把外键名称省略了,零碎会主动创立一个外键名称 ); /*创立用户表 tab_user uid 用户主键,自增长 username 用户名长度 100,惟一,非空 password 明码长度 30,非空 name 实在姓名长度 100 birthday 生日 sex 性别,定长字符串 1 telephone 手机号,字符串 11 email 邮箱,字符串长度 100 */ CREATE TABLE tab_user ( uid INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(100) UNIQUE NOT NULL, PASSWORD VARCHAR(30) NOT NULL, NAME VARCHAR(100), birthday DATE, sex CHAR(1) DEFAULT '男', telephone VARCHAR(11), email VARCHAR(100) ); /* 创立珍藏表 tab_favorite rid 游览线路 id,外键 date 珍藏工夫 uid 用户 id,外键 rid 和 uid 不能反复,设置复合主键,同一个用户不能珍藏同一个线路两次 */ CREATE TABLE tab_favorite ( rid INT, -- 线路id DATE DATETIME, uid INT, -- 用户id -- 创立复合主键 PRIMARY KEY(rid,uid), -- 联结主键 FOREIGN KEY (rid) REFERENCES tab_route(rid), FOREIGN KEY(uid) REFERENCES tab_user(uid) ); 数据库设计的范式 概念:设计数据库时,须要遵循的一些标准。要遵循后边的范式要求,必须先遵循前边的所有范式要求 ...

August 23, 2020 · 2 min · jiezi

关于mysql:SQL教程

SQL就是拜访和解决关系数据库的计算机规范语言。也就是说,无论用什么编程语言(Java、Python、C++……)编写程序,只有波及到操作关系数据库,比方,一个电商网站须要把用户和商品信息存入数据库,或者一个手机游戏须要把用户的道具、通关信息存入数据库,都必须通过SQL来实现。 NoSQL你可能还据说过NoSQL数据库,也就是非SQL的数据库,包含MongoDB、Cassandra、Dynamo等等,它们都不是关系数据库。有很多人宣扬古代Web程序曾经无需关系数据库了,只须要应用NoSQL就能够。但事实上,SQL数据库从始至终从未被取代过。 关系数据库概述数据库作为一种专门治理数据的软件就呈现了。应用程序不须要本人治理数据,而是通过数据库软件提供的接口来读写数据。至于数据自身如何存储到文件,那是数据库软件的事件,应用程序本人并不关怀: ┌──────────────┐│ application │└──────────────┘ ▲│ ││ read││write ││ │▼┌──────────────┐│ database │└──────────────┘这样一来,编写应用程序的时候,数据读写的性能就被大大地简化了。 数据模型数据库依照数据结构来组织、存储和治理数据,实际上,数据库一共有三种模型: 层次模型网状模型关系模型层次模型就是以“上下级”的档次关系来组织数据的一种形式,层次模型的数据结构看起来就像一颗树: ┌─────┐ │ │ └─────┘ │ ┌───────┴───────┐ │ │ ┌─────┐ ┌─────┐ │ │ │ │ └─────┘ └─────┘ │ │ ┌───┴───┐ ┌───┴───┐ │ │ │ │┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐│ │ │ │ │ │ │ │└─────┘ └─────┘ └─────┘ └─────┘网状模型把每个数据节点和其余很多节点都连接起来,它的数据结构看起来就像很多城市之间的路网: ┌─────┐ ┌─────┐ ┌─│ │──────│ │──┐ │ └─────┘ └─────┘ │ │ │ │ │ │ └──────┬─────┘ │ │ │ │┌─────┐ ┌─────┐ ┌─────┐│ │─────│ │─────│ │└─────┘ └─────┘ └─────┘ │ │ │ │ ┌─────┴─────┐ │ │ │ │ │ │ ┌─────┐ ┌─────┐ │ └──│ │─────│ │──┘ └─────┘ └─────┘关系模型把数据看作是一个二维表格,任何数据都能够通过行号+列号来惟一确定,它的数据模型看起来就是一个Excel表: ...

August 22, 2020 · 3 min · jiezi

关于mysql:第19问MGR-架构如果一个节点网络不稳消息缓存会被撑满么

问题已知状况如下: MySQL 版本为 8.0.21(随 8.0 的小版本升级,MGR 参数和行为变更频繁,须要特地留神版本号)。MGR 架构,一个节点 C 网络不稳时,与其余节点的通信断开。通信断开后,肯定工夫内(5 秒 + group_replication_member_expel_timeout 秒)a. 其余节点开始质疑节点 C 可能掉线。在其余节点上,节点 C 的状态为 UNREACHABLE。b. 其余节点依然能协商并提交新事务,其协商的信息会保留在音讯缓存中。通信复原后,节点 C 会从其余节点的音讯缓存中获取漏掉的信息,并跟上进度。那么,音讯缓存会被撑满么?撑满当前会造成什么影响?试验咱们先建三节点的 MGR,此处疏忽步骤,大家依照官网文档进行就行。来看一下三节点的状态: 咱们晓得 MGR 的音讯缓存大小由 group_replication_message_cache_size 参数控,咱们在三个节点上都将参数设置为最小值(128M),这样比拟容易撑满: 咱们还须要将 group_replication_member_expel_timeout 调大,使得之后通信故障的节点 C 不会被集群踢出。 咱们须要晓得音讯缓存曾经用了多少,能够应用上面的命令: 当初咱们上一些数据库压力,让 MGR 发送音讯,将缓存填满: 看一下填满后的缓存情况: 上面,咱们将 mgr-3 节点的网络通讯断开: 在其余节点查问状态,能够看到故障节点被质疑,但没有踢出: 同时,咱们能够看到数据库压力依然在持续进行。当初,在 primary 节点上,咱们将内存统计表重置: 而后察看内存统计,查看缓存的开释量: 期待一段时间,能够看到缓存的开释量曾经超过缓存大小,意味着整个缓存的内容曾经齐全换过一轮: 接下来,咱们复原故障节点的通信。 通信复原后,故障节点该当从其余节点的缓存中,获取故障阶段的音讯,但这些音讯曾经从缓存中被清掉了,咱们看看故障节点的 error log: ...

August 21, 2020 · 1 min · jiezi

关于mysql:MySQL中几种常见的日志

前言: 在 MySQL 零碎中,有着诸多不同类型的日志。各种日志都有着本人的用处,通过剖析日志,咱们能够优化数据库性能,排除故障,甚至可能还原数据。这些不同类型的日志有助于咱们更清晰的理解数据库,在日常学习及运维过程中也会和这些日志打交道。本节内容将带你理解 MySQL 数据库中几种罕用日志的作用及治理办法。 1.谬误日志(errorlog)谬误日志记录着 mysqld 启动和进行,以及服务器在运行过程中产生的谬误及正告相干信息。当数据库意外宕机或产生其余谬误时,咱们应该去排查谬误日志。 log_error 参数管制谬误日志是否写入文件及文件名称,默认状况下,谬误日志被写入终端规范输入stderr。当然,举荐指定 log_error 参数,自定义谬误日志文件地位及名称。 # 指定谬误日志地位及名称vim /etc/my.cnf [mysqld] log_error = /data/mysql/logs/error.log相干配置变量阐明:log_error={1 | 0 | /PATH/TO/ERROR_LOG_FILENAME}定义谬误日志文件。作用范畴为全局或会话级别,属非动静变量。2.慢查问日志(slow query log)慢查问日志是用来记录执行工夫超过 long_query_time 这个变量定义的时长的查问语句。通过慢查问日志,能够查找出哪些查问语句的执行效率很低,以便进行优化。 与慢查问相干的几个参数如下: slow_query_log:是否启用慢查问日志,默认为0,可设置为0,1。slow_query_log_file:指定慢查问日志地位及名称,默认值为host_name-slow.log,可指定绝对路径。long_query_time:慢查问执行工夫阈值,超过此工夫会记录,默认为10,单位为s。log_output:慢查问日志输入指标,默认为file,即输入到文件。默认状况下,慢查问日志是不开启的,个别状况下倡议开启,不便进行慢SQL优化。在配置文件中能够减少以下参数: # 慢查问日志相干配置,可依据理论状况批改vim /etc/my.cnf [mysqld] slow_query_log = 1slow_query_log_file = /data/mysql/logs/slow.loglong_query_time = 3log_output = FILE3.个别查问日志(general log)个别查问日志又称通用查问日志,是 MySQL 中记录最具体的日志,该日志会记录 mysqld 所有相干操作,当 clients 连贯或断开连接时,服务器将信息写入此日志,并记录从 clients 收到的每个 SQL 语句。当你狐疑 client 中的谬误并想要确切晓得 client 发送给mysqld的内容时,通用查问日志十分有用。 默认状况下,general log 是敞开的,开启通用查问日志会减少很多磁盘 I/O, 所以如非出于调试排错目标,不倡议开启通用查问日志。相干参数配置介绍如下: # general log相干配置vim /etc/my.cnf [mysqld]general_log = 0 //默认值是0,即不开启,可设置为1general_log_file = /data/mysql/logs/general.log //指定日志地位及名称4.二进制日志(binlog)对于二进制日志,后面有篇文章做过介绍。它记录了数据库所有执行的DDL和DML语句(除了数据查问语句select、show等),以事件模式记录并保留在二进制文件中。罕用于数据恢复和主从复制。 ...

August 21, 2020 · 1 min · jiezi

关于mysql:第02期ClickHouse-单机部署以及从-MySQL-增量同步数据

本期作者:邓亚运37 互娱高级 DBA,负责公司 MySQL,Redis,Hadoop,Clickhouse 集群的治理和保护。背景随着数据量的回升,OLAP 始终是被探讨的话题,尽管 druid,kylin 可能解决 OLAP 问题,然而 druid,kylin 也是须要和 hadoop 全家桶一起用的,异样的轻便,再说我也搞不定,那只能找我能搞定的技术。故引进 clickhouse,对于 clickhouse 在 17 年自己就开始关注,并且写了一些入门的介绍,直到 19 年 clickhouse 性能缓缓的丰盛才又缓缓的关注,并且编写了同步程序,把 mysql 数据实时同步到 clickhouse,并且最终在线上应用起来。 对于 clickhouse 是什么请自行查阅官网:https://clickhouse.yandex/ clickhouse 官网性能测试: https://clickhouse.yandex/ben... clickhouse 面对海量数据,比方单表过百亿能够应用集群(复制 + 分片),如果数据量比拟小,比方单表 10-20 亿应用单机就足以满足查问需要。如果应用复制须要应用 zk,更多集群的请自行查阅官网材料。 单机部署(以前的文章也有写过单机部署) 在 2016 年 clickhouse 刚开始开源的时候对 Ubuntu 反对十分敌对,一个 apt 命令就能够装置了。对于 centos 等零碎反对就比拟差,须要本人编译,而且不肯定可能胜利。随着应用人群的扩充,目前对于 centos 反对也是十分的敌对 了,有 rpm 包能够间接装置。甚至目前 Altinity 公司曾经制作了 yum 源,增加源之后间接 yum 装置实现。这个在官网文档外面也有提到。 参考: https://clickhouse.yandex/doc... https://github.com/Altinity/clickhouse-rpm-install 目前线上应用的是 centos 7.0 的零碎。之所以应用 7.0 的零碎是因为同步数据的程序是用 python 写的,而且用到的 一个外围包:python-mysql-replication 须要应用 python 2.7 的环境。同时因为 clickhouse 不兼容 mysql 协定,为了不便开发接入零碎不必过多更改代码,引入了 proxysql 兼容 mysql 协定,clickhouse 最新版本曾经反对 mysql 协定,反对 clickhouse 的 proxysql 也须要 python 2.7 的环境,所以罗唆间接用 centos 7.0 零碎 ...

August 20, 2020 · 7 min · jiezi

关于mysql:mysql主从服务器的搭建两台服务器实现读写分离

介绍当我的项目访问量比拟多 相应的数据库的读写操作就特地多,就会导致服务器受不了那么多用户的申请和对数据的操作,导致服务器负荷,相应的用户的等待时间就会特地长,给用户的体验特地差,而主从同步就很好的解决的这种并发的问题。主从同步:简略来说就是应用两台服务器,别离解决用户的读和写的操作,从而实现了读写拆散。因为从服务器同步的主服务器上的数据,所以主从同步极大的保障了数据的平安。## 需要 您须要架设两台服务器(A服务器与B服务器)都装好msql敞开iptables 和selinux service iptables stop setenforce 0批改/etc/my.confserver-id = 1 #主服务器能够设置为1,从服务器能够设置为IP最初一段(保障唯一性)log-bin=mysql-bin #主从服务器的外围service mysql restart #重启服务器确认主服务器和从服务器数据库和表保持一致==以上主从服务器都得进行设置 以下的是针对主从 各个服务器的设置== 主服务器配置(创立一个专门用来同步数据的账号)mysql -uroot -p#登陆mysqlgrant replication slave on *.* to 'xiaoming'@'%' identified by '123456';show master status; #查看状态,尔后不再进行任何操作 如图所示 从服务器上进行配置mysql -uroot -p#登陆mysqlchange master to master_host="#your ip#", master_user='xiaoming',master_password='123456', master_log_file='mysql-bin.000006',master_log_pos=511;其中 master_host 后接主服务器的 ip master_user后接主服务器设置的用户名 master_password后接主服务器设置的明码 master_log_file和 master_log_pos 后接本人主服务器上如上图统一start slave;#开启从服务 show slave status\G #查看从服务状态 如果 Slave_IO_Running:Yes Slave_SQL Running:Yes 则标识主从胜利这样 就能够在主服务上进行写入/批改数据 从服务器进行读取到写入和批改过的数据

August 20, 2020 · 1 min · jiezi

关于mysql:京东智联云MySQL数据库如何保障数据的可靠性

MySQL作为以后最风行的关系型数据库,在各个行业的零碎中扮演着最重要的角色。随着大家对数据价值认可的逐渐加深,数据的可靠性是最常被问到的一个问题。MySQL是如何保证数据可靠性的?京东智联云RDS-MySQL又做了哪些优化和新个性来保障用户数据的可靠性和一致性?本篇文章将为大家一一揭秘。 MySQL如何保证数据可靠性MySQL的Innodb存储引擎反对ACID(原子性Atomicity,一致性Consistency,隔离性Isolation,持久性Durability)个性,正是因为保障了一致性和持久性,所以数据才是牢靠的。很多关系型数据库为保障数据库的可靠性,同时最大限度地晋升性能,采纳了预写日志(Write-Ahead Logging)的办法,MySQL也不例外。它将数据变动先写入日志,而后立即返回给客户端更新胜利,真正的数据再异步更新到磁盘的数据文件。如果两头零碎产生故障,只有日志在数据就不会失落,这就保障了数据的可靠性。 MySQL写入的日志就是binlog和redo log文件,上面咱们来介绍下两种日志的写入流程。 binlog写入机制事务执行过程中,MySQL会将所有变更记录到binlog cache中,在事务commit的时候一起写入binlog文件中。 binlog cache是由参数binlog_cache_size管制,默认32KB,如果事务很大,变更内容超过了binlog cache,则会写到磁盘中。通过命令show global status like 'Binlog_cache_disk_use';能够查看binlog cache写入磁盘的次数,如果数量过多,倡议调大binlog_cache_size参数值。 每个线程都会调配binlog cache,然而都共用一份binlog文件。流程图如下: 在写入到零碎的日志文件中有两个步骤,write和fsync。wirte是写入操作系统的缓存,fsync是长久化到磁盘文件,这个操作会占用零碎的IOPS,而它们操作的机会是通过参数sync_binlog管制。 l sync_binlog=0,事务提交时,只做write操作,由操作系统本人管制fsync操作。这个是最危险的,一旦操作系统宕机,binlog cache中的变更内容全副会失落。 l sync_binlog=1,事务提交时,都会做write和fsync操作。安全性最高,然而性能损耗也是最大的。 l sync_binlog=N,事务提交时,会做write操作,累积N个事务时做fsync操作。一旦操作系统宕机,会失落binlog cache中局部变更内容。 redo log写入机制事务执行过程中,也是先写入内存redo log buffer中,而后再写入到磁盘文件。其中redo log buffer是所有线程共用的。与binlog写到文件一样,写redo log也有write和fsync两个操作,它们操作的理论是通过参数innodb_flush_log_at_trx_commit管制。 l innodb_flush_log_at_trx_commit=0,事务提交时,只将变更内容写到redo log buffer,由后盾Master线程每秒write和fsync到磁盘文件。 l innodb_flush_log_at_trx_commit=1,事务提交时,执行write和fsync操作。这是最平安的配置。 l innodb_flush_log_at_trx_commit=2,事务提交时,只执行write操作,即只写到操作系统的缓存中,由后盾Master线程每秒fsync到磁盘文件。 对于这个参数与数据可靠性之间的关系如下表所示: innodb_flush_log_at_trx_commit 数据库过程异样 操作零碎异样 0 失落最多1s的数据 失落最多1s的数据 1 不丢数据 不丢数据 2 不丢数据 失落最多1s的数据 参数sync_binlog=1与innodb_flush_log_at_trx_commit=1就是DBA常说的“双1”配置,也是线上环境数据最平安最牢靠的配置。 再比照下binlog和redo log的不同之处: binlog redo log 记录者 MySQL server Innodb引擎 记录工夫 ...

August 18, 2020 · 1 min · jiezi

关于mysql:MySQL数据库MySQL服务器的启动和关闭登录和退出MySQL的目录

MySQL服务器的启动和敞开============== MySQL服务器的启动启动形式有两种: 1.手动通过界面启动和敞开 2.通过命令行启动和敞开MySQL服务器先通过管理员关上cmd命令窗口 再通过以下命令开启和敞开MySQL服务器 net start mysql : 启动mysql的服务 net stop mysql:敞开mysql服务 截图如下: MySQL登录和退出MySQL登录登录有三种形式:(第一种是连贯本地的mysql服务器,第二种和第三种是连贯近程的服务器,第二种是简写模式,第三种是全写模式) 1. mysql -uroot -p明码 2. mysql -h+ip -uroot -p连贯指标的明码 3. mysql --host=ip --user=root --password=连贯指标的明码 实际截图 MySQL退出1. exit 2. quit   MySQL装置目录构造=========== 1、bin目录         用于搁置一些二进制的可执行文件,如mysql.exe、mysqld.exe、mysqlshow.exe等。    2、data目录         用于搁置一些日志文件以及数据文件。    3、include目录         用于搁置一些C语言的头信息文件,如:mysql.h、mysql_ername.h等。    4、lib目录         用于搁置一系列运行所须要的库文件。    5、share目录         用于寄存字符集、语言等信息。    6、my.ini         是MySQL数据库中默认应用的配置文件,外面记录了mysql装置的目录,数据寄存的目录,应用的字符集等等。    7、my-huge.ini         适宜超大型数据库的配置文件。 ...

August 18, 2020 · 1 min · jiezi

关于mysql:MySQL数据库数据库的基本知识

数据库的英文单词: DataBase   简称 : DB 数据库定义===== 数据库是存储和治理数据的仓库,数据库依照特定的格局将数据存储起来,就如同咱们把文件存储在硬盘一样,存储在硬盘上的文件咱们是通过流的形式来存取,而数据库中的数据咱们能够通过sql语句进行增删改查操作 数据库的特点====== 1. 长久化存储数据的。其实数据库就是一个文件系统 2. 不便存储和治理数据 3. 应用了对立的SQL语句的形式来操作数据库 常见的数据库====== MySQL:甲骨文公司,开源收费的数据库,小型的数据库,曾经被 Oracle 收买了。MySQL6.x 版本也开始免费。起初 Sun 公司收买了 MySQL,而 Sun 公司又被 Oracle 收买 Oracle:甲骨文公司,免费商业软件,实用于大型电商网站 DB2 :IBM 公司,免费的数据库产品。常利用在银行零碎中 SQL Server:微软,通常用于政府网站,公司免费的中型的数据库,并且大学教学通常都是采纳SQLServer,图形化工具做的不错,C#、.net 等语言常应用 SQLite: 嵌入式的小型数据库,利用在手机端,如:Android Mariadb:由mysql创始人搞进去的,是mysql开源版本的一个分支,基本上所有命令都一样

August 18, 2020 · 1 min · jiezi

关于mysql:MySQL数据库数据安装与卸载

MySQL数据库的装置=========== 双击msi因为6.0之后是免费版本,所以这里咱们应用5.5版本的mysql,关上下载的 mysql 安装文件双击解压缩,运行“mysql-5.5.40-win32.msi”或者“mysql-5.5.40-win64.msi” 文件下载门路如下:(如果是64位操作系统就抉择64位,如果是32位操作系统就抉择32位) 链接:https://pan.baidu.com/s/1Y4OG...  提取码:88ov 抉择装置类型抉择装置类型,有“Typical(默认)”、“Complete(齐全)”、“Custom(用户自定义)”三个选项,咱们抉择“Custom”, 按“next”键持续 指定装置目录点选“Browse”,手动指定装置目录 填上装置目录,我的是“d:\Program Files (x86)\MySQL\MySQL Server 5.0”,按“OK”持续。 开始装置确认一下先前的设置,如果有误,按“Back”返回重做。按“Install”开始装置。 启动MySQL配置正在装置中,请稍候,直到呈现上面的界面, 则实现 MYSQL 的装置,数据库装置好了还须要对数据库进行配置能力应用 MYSQL 装置实现了,呈现如下界面将进入 mysql 配置向导。 抉择配置形式抉择配置形式,“Detailed Configuration(手动准确配置)”、“Standard Configuration(标准配置)”,咱们抉择“Detailed Configuration”,不便相熟配置过程。 抉择服务器类型抉择服务器类型,“Developer Machine(开发测试类,mysql 占用很少资源)”、“Server Machine(服务器类型,mysql 占用较多资源)”、“Dedicated MySQL Server Machine(专门的数据库服务器,mysql 占用所有可用资源)” 抉择mysql数据库的大抵用处抉择mysql数据库的大抵用处,“Multifunctional Database(通用多功能型,好)”、“Transactional Database Only(服务器类型,专一于事务处理,个别)”、“Non-Transactional Database Only(非事务 解决型,较简略,次要做一些监控、记数用,对 MyISAM 数据类型的反对仅限于 non-transactional),按“Next” 持续。 抉择网站并发连接数抉择网站并发连接数,同时连贯的数目,“Decision Support(DSS)/OLAP(20个左右)“Online ”、 Transaction Processing(OLTP)(500 个左右)”、“Manual Setting(手动设置,本人输一个数)”。 ...

August 18, 2020 · 1 min · jiezi

关于mysql:MySQL数据库数据安装与卸载

MySQL数据库的装置=========== 双击msi因为6.0之后是免费版本,所以这里咱们应用5.5版本的mysql,关上下载的 mysql 安装文件双击解压缩,运行“mysql-5.5.40-win32.msi”或者“mysql-5.5.40-win64.msi” 文件下载门路如下:(如果是64位操作系统就抉择64位,如果是32位操作系统就抉择32位) 链接:https://pan.baidu.com/s/1Y4OG...  提取码:88ov 抉择装置类型抉择装置类型,有“Typical(默认)”、“Complete(齐全)”、“Custom(用户自定义)”三个选项,咱们抉择“Custom”, 按“next”键持续 指定装置目录点选“Browse”,手动指定装置目录 填上装置目录,我的是“d:\Program Files (x86)\MySQL\MySQL Server 5.0”,按“OK”持续。 开始装置确认一下先前的设置,如果有误,按“Back”返回重做。按“Install”开始装置。 启动MySQL配置正在装置中,请稍候,直到呈现上面的界面, 则实现 MYSQL 的装置,数据库装置好了还须要对数据库进行配置能力应用 MYSQL 装置实现了,呈现如下界面将进入 mysql 配置向导。 抉择配置形式抉择配置形式,“Detailed Configuration(手动准确配置)”、“Standard Configuration(标准配置)”,咱们抉择“Detailed Configuration”,不便相熟配置过程。 抉择服务器类型抉择服务器类型,“Developer Machine(开发测试类,mysql 占用很少资源)”、“Server Machine(服务器类型,mysql 占用较多资源)”、“Dedicated MySQL Server Machine(专门的数据库服务器,mysql 占用所有可用资源)” 抉择mysql数据库的大抵用处抉择mysql数据库的大抵用处,“Multifunctional Database(通用多功能型,好)”、“Transactional Database Only(服务器类型,专一于事务处理,个别)”、“Non-Transactional Database Only(非事务 解决型,较简略,次要做一些监控、记数用,对 MyISAM 数据类型的反对仅限于 non-transactional),按“Next” 持续。 抉择网站并发连接数抉择网站并发连接数,同时连贯的数目,“Decision Support(DSS)/OLAP(20个左右)“Online ”、 Transaction Processing(OLTP)(500 个左右)”、“Manual Setting(手动设置,本人输一个数)”。 ...

August 18, 2020 · 1 min · jiezi

关于mysql:实战分享丨MySQL-与Django版本匹配相关经验

摘要:对于MySQL 与Django版本匹配相干常识的教训分享。run: (env) E:\PythonPro\PyDjangoProDemo011\xuanyuaniotpro>python manage.py migrate报错代码提醒如下: raise errorclass(errno, errval)django.db.utils.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(6) NOT NULL)' at line 1")During handling of the above exception, another exception occurred: 依据提醒剖析报错起因: Django2.1不再反对MySQL5.5,必须mysql5.6版本以上 查mysql版本和Django版本: mysql版本: Django版本: 依据起因剖析得出解决思路: 二选一 (1)Django降级到2.0(env) PS E:\PythonPro\PyDjangoProDemo011\xuanyuaniotpro> pip install Django==2.0.0 -i https://pypi.douban.com/simple ...

August 17, 2020 · 1 min · jiezi

关于mysql:MySQL学习笔记5-约束

概念: 对表中的数据进行限定,保证数据的正确性、有效性和完整性。 分类:1. 主键束缚:primary key2. 非空束缚:not null3. 惟一束缚:unique4. 外键束缚:foreign key非空束缚:not null,值不能为null1. 创立表时增加束缚 CREATE TABLE stu( id INT, NAME VARCHAR(20) NOT NULL -- name为非空 );2. 创立表完后,增加非空束缚 ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;3. 删除name的非空束缚 ALTER TABLE stu MODIFY NAME VARCHAR(20); 惟一束缚:unique,值不能反复1.创立表时,增加惟一束缚 CREATE TABLE stu( id INT, phone_number VARCHAR(20) UNIQUE -- 增加了惟一束缚 );* 留神mysql中,惟一束缚限定的列的值能够有多个null删除惟一束缚(惟一索引)ALTER TABLE stu DROP INDEX phone_number; 在创立表后,增加惟一束缚 ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;!!:如果增加束缚前存在雷同值,增加语句执行后会报错主键束缚:primary key。一张表只有一个列为主键1.留神: ...

August 16, 2020 · 1 min · jiezi

关于mysql:MySQL学习笔记4-DQL

DQL(Data Query Language)数据查询语言用来查问数据库中表的记录(数据)。关键字:select, where 等 select * from 表名; 语法: select 字段列表from 表名列表where 条件列表group by 分组字段having 分组之后的条件order by 排序limit 分页限定 根底查问一、多个字段的查问select 字段名1,字段名2,... from 表名; 留神: 如果查问所有字段,能够用 * 来代替字段列表二、去除反复distinct eg: SELECT DISTINCT 列名 FROM 表名; 多列名时,保障每行对应列名处齐全一样才能够去除 三、计算列个别能够应用四则运算计算一些列的值。 eg:SELECT name,math,english,math+english FROM 表名;math + english即是运算,并且新建别名 IFNULL(表达式1,表达式2):NULL参加的运算,计算结果都为NULL 表达式1:哪个字段须要判断为NULL 表达式2:替换为哪个值 SELECT name,math,english,math+ IFNULL(english,0) FROM 表名; 四、起别名SELECT name,math,english,math+ IFNULL(english,0) AS 总分 FROM 表名; AS 也能够省略,肯定要有空格 条件查问1.where字句后跟条件 2.运算符、< 、<= 、>= 、= 、<>(不等于)BETWEEN...AND...IN( 汇合) LIKE:含糊查问 占位符: _:单个任意字符 %:多个任意字符IS NULLand 或 &&or 或 ||not 或 ! ...

August 15, 2020 · 2 min · jiezi

关于mysql:MySQL学习笔记3-DML

DML(Data Manipulation Language)数据操作语言用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等 1.增加数据语法: insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);留神: 1.列名和值要一一对应 2.如果表名后不定义列名,默认给所有列增加值 3.除了数字类型,其余类型须要应用引号(单双都可)2.删除数据语法: delete from 表名 [where 条件]留神: 1.如果不加条件,会删除表中所有记录 2.如果要删除所有记录 ①:delete from 表名; (不举荐,有多少条记录就会执行多少次删除) ②:TRUNCATE TABLE 表名; 举荐应用,先删除表,再创立一样的空表3.批改数据语法: update 表名 set 列名1 = 值1,列名2=值2,..[where 条件]; 留神: 1.若不加条件,会将表中所有的记录全副批改

August 15, 2020 · 1 min · jiezi

关于mysql:MySQL学习笔记3-DML

DML(Data Manipulation Language)数据操作语言用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等 1.增加数据语法: insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);留神: 1.列名和值要一一对应 2.如果表名后不定义列名,默认给所有列增加值 3.除了数字类型,其余类型须要应用引号(单双都可)2.删除数据语法: delete from 表名 [where 条件]留神: 1.如果不加条件,会删除表中所有记录 2.如果要删除所有记录 ①:delete from 表名; (不举荐,有多少条记录就会执行多少次删除) ②:TRUNCATE TABLE 表名; 举荐应用,先删除表,再创立一样的空表3.批改数据语法: update 表名 set 列名1 = 值1,列名2=值2,..[where 条件]; 留神: 1.若不加条件,会将表中所有的记录全副批改

August 15, 2020 · 1 min · jiezi

关于mysql:事务那些事儿

前言有段时间没更新博客了,最近在学习一些无关事务的知识点,明天来总结一下,本文会波及到以下几个知识点: MySQL事务Spring事务分布式事务什么是事务事务是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务。举个例子: 张三要给李四转账100元,那么咱们会有这样的一段SQL: begin transaction; update account set money = money-100 where name = '张三'; update account set money = money+100 where name = '李四';commit transaction;事务的体现:这两个SQL要么全副胜利,要么全副失败。 事务是否失效数据库引擎是否反对事务是要害。比方罕用的 MySQL 数据库默认应用反对事务的innodb引擎。然而,如果把数据库引擎变为 myisam,那么程序也就不再反对事务了! ACID事务具备以下四个个性: 原子性一致性隔离性持久性原子性(Atomicity)一般来说,原子是指不能分解成小局部的货色。例如,在多线程编程中,如果一个线程执行一个原子操作,这意味着另一个线程无奈看到该操作的一半后果。零碎只能处于操作之前或操作之后的状态,而不是介于两者之间的状态。 一致性(Consistency)事务一致性是指数据库中的数据在事务操作前后都必须满足业务规定束缚。 比方A转账给B,那么转账前后,AB的账户总金额应该是统一的。 隔离性(Isolation)一个事务的执行不能被其它事务烦扰。即一个事务外部的操作及应用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能相互烦扰。 (设置不同的隔离级别,相互烦扰的水平会不同) 持久性(Durability)事务一旦提交,后果便是永久性的。即便产生宕机,依然能够依附事务日志实现数据的长久化。 日志包含回滚日志(undo)和重做日志(redo),当咱们通过事务批改数据时,首先会将数据库变动的信息记录到重做日志中,而后再对数据库中的数据进行批改。这样即便数据库系统产生奔溃,咱们还能够通过重做日志进行数据恢复。 MySQL事务隔离级别MySQL有以下四个事务隔离级别: 未提交读(READ UNCOMMITTED)已提交读(READ COMMITTED)可反复读(REPEATABLE READ)串行化(SERIALIZABLE)各个隔离级别可能会存在以下的问题: 那么什么是脏读、不可反复读和幻读? 脏读:指一个事务能够看到另一个事务未提交的数据比如说事务A批改了一个值然而还未提交,这时事务B能够看到A批改的值,这就是脏读。 不可反复读:一个事务执行两次同样的查问语句,前后得出的数据却不统一比如说事务A执行了select语句,事务B批改了某个值,事务A再次执行select语句时发现后果和上次不统一,因而叫做不可反复读。 幻读:在同一个事务中,同一个查问屡次返回的记录行数不统一(这里的后果特指查问到的记录行数,幻读能够看做不可反复读的一种非凡状况)比如说事务A执行了select语句,事务B插入数据,事务A再次执行select语句时发现多了几条记录,如同呈现了幻觉一样,因而叫做幻读。 Read Commit(读已提交)级别是如何解决脏读的?先说论断:通过扭转锁的开释机会来解决脏读问题。 首先先理解一下为什么会呈现脏读?起因就是在未提交读这个级别下,当事务A批改了数据之后就立马开释了锁,因而事务B能够读取到这个未提交的数据。 在已提交读级别下写操作加的锁会到事务提交后开释,所以事务B不会读到事务A未提交的数据,通过扭转锁的开释机会解决了脏读的问题。 Repeatable Read(可反复读)级别是如何解决不可反复读的?论断:可反复读级别就是通过MVCC机制来解决不可反复读问题的 MVCC多版本并发管制(Multi-Version Concurrency Control, MVCC)是 MySQL 的 InnoDB 存储引擎实现隔离级别的一种具体形式,用于实现提交读和可反复读这两种隔离级别。而未提交读隔离级别总是读取最新的数据行,无需应用 MVCC。可串行化隔离级别须要对所有读取的行都加锁,单纯应用 MVCC 无奈实现。MVCC机制(多版本并发管制)就我集体了解来说其实就是给每行数据都增加了几个暗藏字段,用来示意数据的版本号,即一个数据在mysql中会有多个不同的版本。 在讲 MVCC 的实现原理之前,我觉很有必要先去理解一下 MVCC 的两种读模式。 ...

August 15, 2020 · 3 min · jiezi

关于mysql:事务那些事儿

前言有段时间没更新博客了,最近在学习一些无关事务的知识点,明天来总结一下,本文会波及到以下几个知识点: MySQL事务Spring事务分布式事务什么是事务事务是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务。举个例子: 张三要给李四转账100元,那么咱们会有这样的一段SQL: begin transaction; update account set money = money-100 where name = '张三'; update account set money = money+100 where name = '李四';commit transaction;事务的体现:这两个SQL要么全副胜利,要么全副失败。 事务是否失效数据库引擎是否反对事务是要害。比方罕用的 MySQL 数据库默认应用反对事务的innodb引擎。然而,如果把数据库引擎变为 myisam,那么程序也就不再反对事务了! ACID事务具备以下四个个性: 原子性一致性隔离性持久性原子性(Atomicity)一般来说,原子是指不能分解成小局部的货色。例如,在多线程编程中,如果一个线程执行一个原子操作,这意味着另一个线程无奈看到该操作的一半后果。零碎只能处于操作之前或操作之后的状态,而不是介于两者之间的状态。 一致性(Consistency)事务一致性是指数据库中的数据在事务操作前后都必须满足业务规定束缚。 比方A转账给B,那么转账前后,AB的账户总金额应该是统一的。 隔离性(Isolation)一个事务的执行不能被其它事务烦扰。即一个事务外部的操作及应用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能相互烦扰。 (设置不同的隔离级别,相互烦扰的水平会不同) 持久性(Durability)事务一旦提交,后果便是永久性的。即便产生宕机,依然能够依附事务日志实现数据的长久化。 日志包含回滚日志(undo)和重做日志(redo),当咱们通过事务批改数据时,首先会将数据库变动的信息记录到重做日志中,而后再对数据库中的数据进行批改。这样即便数据库系统产生奔溃,咱们还能够通过重做日志进行数据恢复。 MySQL事务隔离级别MySQL有以下四个事务隔离级别: 未提交读(READ UNCOMMITTED)已提交读(READ COMMITTED)可反复读(REPEATABLE READ)串行化(SERIALIZABLE)各个隔离级别可能会存在以下的问题: 那么什么是脏读、不可反复读和幻读? 脏读:指一个事务能够看到另一个事务未提交的数据比如说事务A批改了一个值然而还未提交,这时事务B能够看到A批改的值,这就是脏读。 不可反复读:一个事务执行两次同样的查问语句,前后得出的数据却不统一比如说事务A执行了select语句,事务B批改了某个值,事务A再次执行select语句时发现后果和上次不统一,因而叫做不可反复读。 幻读:在同一个事务中,同一个查问屡次返回的记录行数不统一(这里的后果特指查问到的记录行数,幻读能够看做不可反复读的一种非凡状况)比如说事务A执行了select语句,事务B插入数据,事务A再次执行select语句时发现多了几条记录,如同呈现了幻觉一样,因而叫做幻读。 Read Commit(读已提交)级别是如何解决脏读的?先说论断:通过扭转锁的开释机会来解决脏读问题。 首先先理解一下为什么会呈现脏读?起因就是在未提交读这个级别下,当事务A批改了数据之后就立马开释了锁,因而事务B能够读取到这个未提交的数据。 在已提交读级别下写操作加的锁会到事务提交后开释,所以事务B不会读到事务A未提交的数据,通过扭转锁的开释机会解决了脏读的问题。 Repeatable Read(可反复读)级别是如何解决不可反复读的?论断:可反复读级别就是通过MVCC机制来解决不可反复读问题的 MVCC多版本并发管制(Multi-Version Concurrency Control, MVCC)是 MySQL 的 InnoDB 存储引擎实现隔离级别的一种具体形式,用于实现提交读和可反复读这两种隔离级别。而未提交读隔离级别总是读取最新的数据行,无需应用 MVCC。可串行化隔离级别须要对所有读取的行都加锁,单纯应用 MVCC 无奈实现。MVCC机制(多版本并发管制)就我集体了解来说其实就是给每行数据都增加了几个暗藏字段,用来示意数据的版本号,即一个数据在mysql中会有多个不同的版本。 在讲 MVCC 的实现原理之前,我觉很有必要先去理解一下 MVCC 的两种读模式。 ...

August 15, 2020 · 3 min · jiezi

关于mysql:事务那些事儿

前言有段时间没更新博客了,最近在学习一些无关事务的知识点,明天来总结一下,本文会波及到以下几个知识点: MySQL事务Spring事务分布式事务什么是事务事务是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务。举个例子: 张三要给李四转账100元,那么咱们会有这样的一段SQL: begin transaction; update account set money = money-100 where name = '张三'; update account set money = money+100 where name = '李四';commit transaction;事务的体现:这两个SQL要么全副胜利,要么全副失败。 事务是否失效数据库引擎是否反对事务是要害。比方罕用的 MySQL 数据库默认应用反对事务的innodb引擎。然而,如果把数据库引擎变为 myisam,那么程序也就不再反对事务了! ACID事务具备以下四个个性: 原子性一致性隔离性持久性原子性(Atomicity)一般来说,原子是指不能分解成小局部的货色。例如,在多线程编程中,如果一个线程执行一个原子操作,这意味着另一个线程无奈看到该操作的一半后果。零碎只能处于操作之前或操作之后的状态,而不是介于两者之间的状态。 一致性(Consistency)事务一致性是指数据库中的数据在事务操作前后都必须满足业务规定束缚。 比方A转账给B,那么转账前后,AB的账户总金额应该是统一的。 隔离性(Isolation)一个事务的执行不能被其它事务烦扰。即一个事务外部的操作及应用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能相互烦扰。 (设置不同的隔离级别,相互烦扰的水平会不同) 持久性(Durability)事务一旦提交,后果便是永久性的。即便产生宕机,依然能够依附事务日志实现数据的长久化。 日志包含回滚日志(undo)和重做日志(redo),当咱们通过事务批改数据时,首先会将数据库变动的信息记录到重做日志中,而后再对数据库中的数据进行批改。这样即便数据库系统产生奔溃,咱们还能够通过重做日志进行数据恢复。 MySQL事务隔离级别MySQL有以下四个事务隔离级别: 未提交读(READ UNCOMMITTED)已提交读(READ COMMITTED)可反复读(REPEATABLE READ)串行化(SERIALIZABLE)各个隔离级别可能会存在以下的问题: 那么什么是脏读、不可反复读和幻读? 脏读:指一个事务能够看到另一个事务未提交的数据比如说事务A批改了一个值然而还未提交,这时事务B能够看到A批改的值,这就是脏读。 不可反复读:一个事务执行两次同样的查问语句,前后得出的数据却不统一比如说事务A执行了select语句,事务B批改了某个值,事务A再次执行select语句时发现后果和上次不统一,因而叫做不可反复读。 幻读:在同一个事务中,同一个查问屡次返回的记录行数不统一(这里的后果特指查问到的记录行数,幻读能够看做不可反复读的一种非凡状况)比如说事务A执行了select语句,事务B插入数据,事务A再次执行select语句时发现多了几条记录,如同呈现了幻觉一样,因而叫做幻读。 Read Commit(读已提交)级别是如何解决脏读的?先说论断:通过扭转锁的开释机会来解决脏读问题。 首先先理解一下为什么会呈现脏读?起因就是在未提交读这个级别下,当事务A批改了数据之后就立马开释了锁,因而事务B能够读取到这个未提交的数据。 在已提交读级别下写操作加的锁会到事务提交后开释,所以事务B不会读到事务A未提交的数据,通过扭转锁的开释机会解决了脏读的问题。 Repeatable Read(可反复读)级别是如何解决不可反复读的?论断:可反复读级别就是通过MVCC机制来解决不可反复读问题的 MVCC多版本并发管制(Multi-Version Concurrency Control, MVCC)是 MySQL 的 InnoDB 存储引擎实现隔离级别的一种具体形式,用于实现提交读和可反复读这两种隔离级别。而未提交读隔离级别总是读取最新的数据行,无需应用 MVCC。可串行化隔离级别须要对所有读取的行都加锁,单纯应用 MVCC 无奈实现。MVCC机制(多版本并发管制)就我集体了解来说其实就是给每行数据都增加了几个暗藏字段,用来示意数据的版本号,即一个数据在mysql中会有多个不同的版本。 在讲 MVCC 的实现原理之前,我觉很有必要先去理解一下 MVCC 的两种读模式。 ...

August 15, 2020 · 3 min · jiezi

关于mysql:MySQL日志之bin-logredo-logundo-log

1. bin log(二进制日志)1.1 bin log介绍 bin log记录了对数据库执行更改的所有操作(不包含查问),还包含了执行数据库更改操作的工夫和执行工夫等信息。bin log次要有两个作用: 复原(recovery)。能够通过bin log进行point-in-time的复原。复制(replication)。能够用于搭建MySQL主从集群。 默认bin log是没有开启的,能够通过show variables like 'log_bin';查看。通过在my.cnf配置log-bin[=name]能够启动bin log,如果设置name,则默认bin log文件名为主机名,后缀名为bin log的序列号,所在门路为数据库所在目录(datadir),如: # 配置log-bin,启动bin log# cat /etc/mysql/my.cnf...[mysqld]log-binserver-id=1mysql> show variables like 'datadir';+---------------+-----------------+| Variable_name | Value |+---------------+-----------------+| datadir | /var/lib/mysql/ |+---------------+-----------------+1 row in set (0.00 sec)mysql> system ls -lh /var/lib/mysql/;total 249M-rw-r----- 1 mysql mysql 154 8月 13 19:35 admin-node-bin.000001-rw-r----- 1 mysql mysql 24 8月 13 19:35 admin-node-bin.index-rw-r----- 1 mysql mysql 3.8K 7月 30 00:06 admin-node-slow.log-rw-r----- 1 mysql mysql 56 6月 1 20:08 auto.cnf-rw------- 1 mysql mysql 1.7K 6月 1 20:08 ca-key.pem-rw-r--r-- 1 mysql mysql 1.1K 6月 1 20:08 ca.pem 下面的admin-node-bin.000001就是binlog文件,咱们在配置文件中没有指定名称,所有默认用了主机名(admin-node)做了文件名。admin-node-bin.index为binlog的索引文件,用来存储过往产生的binlog序号,通常状况下,不倡议手工批改这个文件。 ...

August 14, 2020 · 3 min · jiezi

关于mysql:技术译文-How-Can-ScaleFlux-Handle-MySQL-Workload

本文是一篇译文,介绍 Percona 的工程师对 ScaleFlux 的性能压测报告翻译:杨奇龙原文地址:https://www.percona.com/blog/...最近作者有一个针对 ScaleFlux 的产品也叫做 CSD 2000 进行压测的机会. 本文中作者将介绍应用 Intel SSD 和 ScaleFlux 存储设备进行压测的比照后果。 一 咱们为什么须要不一样的 ScaleFlux?答案很简略 它为咱们提供了内置的压缩性能和反对原子写个性。对于很多工作场景尤其是数据库类型的业务而言,这些性能和个性十分重要。 因为内置的磁盘压缩性能 雷同的磁盘容量,咱们能够存储更多的数据在 ScaleFlux 存储设备上。(引申:大规模数据存储的状况下 消耗的机器数量更少,机架位也更少。) 作者基于不同的数据集大小,不同数据库 schema 数据量进行屡次测试。须要阐明的是在这些测试场景中我并不打算压测这些卡的性能极限,而是比照雷同容量下 ScaleFlux 存储设备和 Intel SSD 的性能体现。 存储设备配置:ScaleFlux – CSD 2000 4TBIntel – P4610 3.2TB服务器配置:Application server: Supermicro; SYS-6019U-TN4RT48xIntel(R) Xeon(R) Gold 6126 CPU @ 2.60GHz190G RAMDatabase Server: Inspur; SA5212M432xIntel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz64G RAM在 Application server 运行 sysbench 压测工具,在 Database Server 运行 Percona Server for MySQL 8.0.19 。 ...

August 14, 2020 · 3 min · jiezi

关于mysql:MySQL备份脚本应该这么写

前言: 数据库备份的重要性显而易见,特地是在生产环境,任何数据的失落都可能产生重大的结果。所以,无论什么环境,咱们都应该有相应的备份策略来定时备份数据库。在 MySQL 中,比拟罕用的逻辑备份工具是 mysqldump,本篇文章将介绍 MySQL 定时备份的办法。 1.制订适合的备份策略对于不同的数据库环境,咱们应该思考不同的备份策略。制订备份策略时,应思考以下几点因素: 物理备份还是逻辑备份。这个能够由数据库大小决定,比如说小于100G用逻辑备份,大于100G用物理备份。备份文件保留工夫。这个能够由磁盘大小决定,个别至多保留7天。备份执行工夫。个别放在业务低峰期,比方凌晨执行备份操作。备份间隔时间。个别举荐一天一备,如果零碎不太重要,备份距离也能够缩短。是否有从库。有从库的话,举荐放在从库上备份,减小对主库的压力。2.Linux零碎备份脚本Linux 零碎下,咱们能够利用 crontab 定时工作来执行备份脚本,如果你你对 crontab 还不理解,能够参考以下介绍疾速学习下。 crontab是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。格局:* * * * * command分 时 日 月 周 命令第1列示意分钟1~59 每分钟用*或者 */1示意第2列示意小时1~23(0示意0点)第3列示意日期1~31第4列示意月份1~12第5列标识号星期0~6(0示意星期天)第6列要运行的命令crontab -e 编辑该用户下的定时工作设置crontab -l 列出该用户下的所有定时工作上面咱们来正式书写备份脚本,废话不多说,先给出脚本模板: #!/bin/bash# -------------------------------------------------------------------------------# FileName: mysql_backup.sh # Describe: Used for database backup# Revision: 1.0# Date: 2020/08/11# Author: wang# 设置mysql的登录用户名和明码(依据理论状况填写)mysql_user = "root"mysql_password = "yourpassword"mysql_host = "localhost"mysql_port = "3306"backup_dir = /data/mysql_backupdt=date +'%Y%m%d_%H%M'echo "Backup Begin Date:" $(date +"%Y-%m-%d %H:%M:%S")# 备份全副数据库mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -R -E --all-databases --single-transaction > $backup_dir/mysql_backup_$dt.sqlfind $backup_dir -mtime +7 -type f -name '*.sql' -exec rm -rf {} \;echo "Backup Succeed Date:" $(date +"%Y-%m-%d %H:%M:%S")以上脚本可依据理论状况批改,比方备份某一个库、保留工夫变更等等。脚本写完后要留神调试,调试实现后就能够部署了,比方咱们打算每天凌晨2点进行备份,则能够这样设置定时工作。 ...

August 14, 2020 · 1 min · jiezi

关于mysql:ClickHouse和他的朋友们9MySQL实时复制与实现

本文转自我司大神 BohuTANG的博客 。 很多人看到题目还认为本人走错了早场,其实没有。 ClickHouse 能够挂载为 MySQL 的一个从库 ,先全量再增量的实时同步 MySQL 数据,这个性能能够说是往年最亮眼、最刚需的性能,基于它咱们能够轻松的打造一套企业级解决方案,让 OLTP 和 OLAP 的交融从此不再头疼。 目前反对 MySQL 5.6/5.7/8.0 版本,兼容 Delete/Update 语句,及大部分罕用的 DDL 操作。代码曾经合并到 upstream master 分支,预计在20.8版本作为experimental 性能公布。 毕竟是两个异构生态的交融,依然有不少的工作要做,同时也期待着社区用户的反馈,以减速迭代。 代码获取获取 clickhouse/master 代码编译即可,办法见 ClickHouse和他的敌人们(1)编译、开发、测试… MySQL Master咱们须要一个开启 binlog 的 MySQL 作为 master: docker run -d -e MYSQL_ROOT_PASSWORD=123 mysql:5.7 mysqld --datadir=/var/lib/mysql --server-id=1 --log-bin=/var/lib/mysql/mysql-bin.log --gtid-mode=ON --enforce-gtid-consistency创立数据库和表,并写入数据: mysql> create database ckdb;mysql> use ckdb;mysql> create table t1(a int not null primary key, b int);mysql> insert into t1 values(1,1),(2,2);mysql> select * from t1;+---+------+| a | b |+---+------+| 1 | 1 || 2 | 2 |+---+------+2 rows in set (0.00 sec)ClickHouse Slave目前以 database 为单位进行复制,不同的 database 能够来自不同的 MySQL master,这样就能够实现多个 MySQL 源数据同步到一个 ClickHouse 做 OLAP 剖析性能。 ...

August 13, 2020 · 6 min · jiezi

关于mysql:ClickHouse和他的朋友们9MySQL实时复制与实现

本文转自我司大神 BohuTANG的博客 。 很多人看到题目还认为本人走错了早场,其实没有。 ClickHouse 能够挂载为 MySQL 的一个从库 ,先全量再增量的实时同步 MySQL 数据,这个性能能够说是往年最亮眼、最刚需的性能,基于它咱们能够轻松的打造一套企业级解决方案,让 OLTP 和 OLAP 的交融从此不再头疼。 目前反对 MySQL 5.6/5.7/8.0 版本,兼容 Delete/Update 语句,及大部分罕用的 DDL 操作。代码曾经合并到 upstream master 分支,预计在20.8版本作为experimental 性能公布。 毕竟是两个异构生态的交融,依然有不少的工作要做,同时也期待着社区用户的反馈,以减速迭代。 代码获取获取 clickhouse/master 代码编译即可,办法见 ClickHouse和他的敌人们(1)编译、开发、测试… MySQL Master咱们须要一个开启 binlog 的 MySQL 作为 master: docker run -d -e MYSQL_ROOT_PASSWORD=123 mysql:5.7 mysqld --datadir=/var/lib/mysql --server-id=1 --log-bin=/var/lib/mysql/mysql-bin.log --gtid-mode=ON --enforce-gtid-consistency创立数据库和表,并写入数据: mysql> create database ckdb;mysql> use ckdb;mysql> create table t1(a int not null primary key, b int);mysql> insert into t1 values(1,1),(2,2);mysql> select * from t1;+---+------+| a | b |+---+------+| 1 | 1 || 2 | 2 |+---+------+2 rows in set (0.00 sec)ClickHouse Slave目前以 database 为单位进行复制,不同的 database 能够来自不同的 MySQL master,这样就能够实现多个 MySQL 源数据同步到一个 ClickHouse 做 OLAP 剖析性能。 ...

August 13, 2020 · 6 min · jiezi

关于mysql:Mysql详解MySQL备份策略

1 对于备份1.1 为什么要备份劫难复原,数据库在运行过程中,终会遇到各种各样的问题: 硬件故障、Bug 导致数据损坏、因为服务器宕机或者其余起因造成的数据库不可用。除此以外还有人为操作:DELETE 语句忘加条件、ALTER TABLE 执行错表、DROP TABLE 执行错表、黑客攻击,即便这些问题你都还没遇到,然而依据墨菲定律,总会有遇上的时候。回滚,因为某种Bug或零碎被黑造成大量的损失,这个时候就须要回滚到某个状态。常见的有区块链交易所被黑而后回滚,游戏破绽被利用而后整体回滚。审计,有时候有这样的需要:须要晓得某一个工夫点的数据是怎么样的,可能是年末审计,也可能是因为官司。测试,一个根本的测试需要是,定时拉取线上数据到测试环境,如果有备份,就能够十分不便地拉取数据。1.2 有哪些备份形式1.2.1 逻辑备份逻辑备份是最常见的形式,在数据量比拟少的时候很罕用。 逻辑备份的劣势: 备份复原比较简单,例如 mysqldump 就是 MySQL 自带的备份工作,无需额定装置。复原的时候能够间接应用 mysql 命令进行复原。能够近程备份和复原,也就是说,能够在其余机器执行备份命令。备份进去的数据十分直观,备份进去后,能够应用 sed grep 等工具进行数据提取或者批改。与存储引擎无关,因为备份文件是间接从 MySQL 外面提取进去的数据,所以在直观上,备份数据数据不对引擎做辨别,能够很不便地从 MyISAM 引擎改到 InnoDB 引擎。防止受到文件损坏的影响,如果间接复制原始文件,可能会受到某个文件损坏的影响而失去一个损坏的备份。应用逻辑备份,只有 MySQL 还能执行 SELECT 语句,就能够失去一份可以信赖的逻辑备份,在文件损坏的时候很有用。逻辑备份毛病: 因为必须应用 MySQL 服务进行数据操作,所以备份的时候会占用更多 CPU,且备份工夫可能会更长。逻辑备份在某些场景下比数据库文件更大,文本存储的数据不总是比存储引擎更高效。当然,应用压缩的话会失去一个更小的备份,然而要占用 CPU 资源。(如果索引较多,逻辑备份会比物理备份小。)复原工夫更长,应用逻辑备份的数据恢复,须要占用更多资源去进行锁调配、索引构建、抵触查看、日志刷新。逻辑备份罕用办法: mysqldump 是 MySQL自带的备份工具,通用性强,十分常见。应用的应用通常要加上一些参数,前面持续介绍。select into outfile,以符号宰割数据创立逻辑备份,对于要导入到 CSV 等表格会比拟实用。mydumper,容许应用多线程进行备份,备份文件会进行表构造和数据拆散,在复原某些表或数据的时候会十分无效。1.2.2 物理备份物理备份在数据量较大的时候十分常见。 物理备份的劣势: 备份速度快,因为物理备份是基于复制进行备份,象征者复制有多快,备份就能有多快。复原速度快,只须要把文件复制到数据库目录就能够实现复原,不须要查看锁、构建索引。复原简略,对于 MySIAM 引擎的表,不须要停库,只须要简略地复制进数据目录就能够。对于 InnoDB,如果是每个表一个表空间,也能够不停库操作,应用卸载加载表空间的形式便可导入(不太平安)。物理备份毛病: 没有官网物理热备份工具的反对。没有官网工具的反对,意味着出问题的概率较大,应用的时候就要审慎了InnoDB 的原始文件通常比逻辑备份要大。InnoDB 表空间往往蕴含很多未被应用的空间,InnoDB 表在删除数据后不会开释空间,所以即便数据量不大,文件有可能很大。除此以外,文件中除了数据还蕴含了索引、日志等信息。物理备份不总能够跨平台跨版本。MySQL 文件和操作系统、MySQL 版本非亲非故,如果环境与原来不统一,很有可能会呈现问题。物理备份罕用办法: xtrabackup 是最罕用的物理备份工具,由 percona 开源,可能实现对 InnoDB 存储引擎和 XtraDB 存储引擎非阻塞地备份(对于 MyISAM 还是要加锁),失去一份一致性备份。间接复制文件/文件系统快照,这种形式对于 MySIAM 引擎是十分高效的,只须要执行 FLUSH TABLE WITH READ LOCK 就能够复制失去一份备份文件。然而对于 InnoDB 引擎就比拟艰难,因为 InnoDB 引擎应用了大量的异步技术,即便执行了 FLUSH TABLE WITH READ LOCK,它还是会持续合并日志、缓存数据。所以要用这种办法备份 InnoDB,须要确保 checkpoint 曾经最新。1.2 为什么要备份 binlog如果有 DBA 通知你,这个数据库可能复原到两个个月内任何状态,这阐明了,这个数据库的 binlog 日志至多保留了两个月。备份 binlog 的益处: ...

August 13, 2020 · 2 min · jiezi

关于mysql:Mysql详解MySQL数据恢复

日常工作中,总会有因手抖、写错条件、写错表名、错连生产库造成的误删库表和数据的事件产生,那么,如果连数据都复原不了,还要什么 DBA。 相干文章 MySQL备份策略MySQL数据恢复1 前言数据恢复的前提的做好备份,且开启 binlog, 格局为 row。如果没有备份文件,那么删掉库表后就真的删掉了,lsof 中还有记录的话,有可能复原一部分文件,但若刚好数据库没有关上这个表文件,那就只能跑路了。如果没有开启 binlog,那么复原数据后,从备份工夫点开始的数据都没得了。如果 binlog 格局不为 row,那么在误操作数据后就没有方法做闪回操作,只能老老实实地走备份复原流程。 2 间接复原间接复原是应用备份文件做全量复原,这是最常见的场景 2.1 mysqldump备份全量复原应用 mysqldump 文件复原数据非常简单,间接解压了执行 gzip -d backup.sql.gz | mysql -u<user> -h<host> -P<port> -p2.2 xtrabackup备份全量复原复原过程 # 步骤一:解压(如果没有压缩能够疏忽这一步)innobackupex --decompress <备份文件所在目录># 步骤二:利用日志innobackupex --apply-log <备份文件所在目录> # 步骤三:复制备份文件到数据目录innobackupex --datadir=<MySQL数据目录> --copy-back <备份文件所在目录>2.3 基于工夫点复原基于工夫点的复原依赖的是binlog日志,须要从 binlog 中找过从备份点到复原点的所有日志,而后利用,咱们测试一下 新建测试表 chengqm-3306>>show create table mytest.mytest \G;*************************** 1. row *************************** Table: mytestCreate Table: CREATE TABLE `mytest` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ctime` datetime DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8每秒插入一条数据 ...

August 13, 2020 · 5 min · jiezi

关于mysql:MySQL-中-datetime-和-timestamp-的区别与选择

MySQL 中罕用的两种工夫贮存类型别离是datetime和 timestamp。如何在它们之间抉择是建表时必要的思考。上面就谈谈他们的区别和怎么抉择。 1 区别1.1 占用空间 类型占据字节示意模式datetime8 字节yyyy-mm-dd hh:mm:sstimestamp4 字节yyyy-mm-dd hh:mm:ss1.2 示意范畴 类型示意范畴datetime'1000-01-01 00:00:00.000000' to '9999-12-31 23:59:59.999999'timestamp'1970-01-01 00:00:01.000000' to '2038-01-19 03:14:07.999999'timestamp翻译为汉语即"工夫戳",它是以后工夫到 Unix元年(1970 年 1 月 1 日 0 时 0 分 0 秒)的秒数。对于某些工夫的计算,如果是以 datetime 的模式会比拟艰难,如果我是 1994-1-20 06:06:06 出世,当初的工夫是 2016-10-1 20:04:50 ,那么要计算我活了多少秒钟用 datetime 还须要函数进行转换,然而 timestamp 间接相减就行。 1.3 时区timestamp 只占 4 个字节,而且是以utc的格局贮存, 它会自动检索以后时区并进行转换。 datetime以 8 个字节贮存,不会进行时区的检索. 也就是说,对于timestamp来说,如果贮存时的时区和检索时的时区不一样,那么拿进去的数据也不一样。对于datetime来说,存什么拿到的就是什么。 还有一个区别就是如果存进去的是NULL,timestamp会主动贮存以后工夫,而 datetime会贮存 NULL。 2 测试咱们新建一个表 插入数据 查看数据,能够看到存进去的是NULL,timestamp会主动贮存以后工夫,而 datetime会贮存NULL ...

August 13, 2020 · 1 min · jiezi

关于mysql:Centos7利用docker搭建nextcloudonlyoffice

nextcloud是一款收费的开源软件,很适宜在日常办公中作为文件共享平台来应用,作为技术小白的我,通过一个月的钻研,终于利用docker胜利搭建了nextcloud+onlyoffice,实现了文件共享并间接从web端进行文档编写的性能。上面简略形容一下我的装置过程,以及一些在装置过程中遇到的问题。一、因为首次尝试,我利用VMware装置了CentOS7版本的Linux零碎(网上曾经有很多成熟的装置过程,这里就不再赘述)。二、装置docker1、更新yum零碎包到最新版本#yum -y update2、执行docker装置脚本#curl -sSL https://get.docker.com/ | sh#yum install -y docker-selinux3、启动docker#systemctl start docker.service4、验证docker是否失常装置#docker run hello-world5、查看是否设置开机启动#systemctl list-unit-files | grep enable6、设置开机自启动#systemctl enable docker.service三、装置MySQL、nextcloud、onlyoffice1、拉取镜像:#docker pull mysql:latest#docker pull nextcloud#docker pull onlyoffice/documentserver依据网速等多方面起因,拉取镜像可能会很慢,需急躁期待。2、配置MySQL#docker run -p 3306:3306 --name mysql --restart="always" -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/logs:/logs -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql***********04d8c735c3b6133fb3af83d321bc72*************# docker ps |grep mysql757******bbb4 mysql "docker-entrypoint.s…" 32 seconds ago Up 31 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp fno_mysql# docker exec -it 757******bbb4 /bin/bashroot@75767208bbb4:/# mysql -uroot -pEnter password: Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 8Server version: 8.0.20 MySQL Community Server - GPLCopyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> grant all PRIVILEGES on *.* to root@'%' WITH GRANT OPTION; #受权root登录Query OK, 0 rows affected (0.01 sec)#批改root账号的明码验证插件类型为mysql_native_password这是mysql8之后的问题:mysql> ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;Query OK, 0 rows affected (0.02 sec)mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';Query OK, 0 rows affected (0.01 sec)mysql> FLUSH PRIVILEGES;Query OK, 0 rows affected (0.01 sec)mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sys |+--------------------+4 rows in set (0.01 sec)42 mysql>备注:此处两次exit回车退出设置3、装置nextclouddocker run -d \-v /root/nextcloud/html:/var/www/html \-v /root/nextcloud/apps:/var/www/html/custom_apps \-v /root/nextcloud/config:/var/www/html/config \-v /root/nextcloud/nextcloud/data:/var/www/html/data \-v /root/nextcloud/themes:/var/www/html/themes \-p 8080:80 --name nextcloud --restart="always" nextcloud装置后肯定要查看防火墙是否曾经敞开,如防火墙处于开启状态,nextcloud则无奈登录MySQL数据库。敞开防火墙后再进行登录查看防火状态systemctl status firewalld临时敞开防火墙systemctl stop firewalld永恒敞开防火墙systemctl disable firewalld拜访http://装置主机ip:8080/ 页面 ...

August 13, 2020 · 2 min · jiezi

关于mysql:聊聊mysql中的int1

昨天有个读者问了我这样一个问题在mysql中建表的时候,我设置一个字段为int类型,长度为1,然而我发现这个字段却能够存储任意长度的数字,这是什么状况?这个问题在我刚接触数据库的时候也遇到过,我感觉有必要写一篇文章来解释一下。 0 和 1 是计算机最根本的存储单位。也是 CPU 采纳的最根本的计算单位,也就是二进制。int 类型占 4 个字节,一个字节是 8 位,也就是说 int 类型在计算机底层是由 32 个 0 跟 1 示意,转化为十进制就是 2 的 32 次方,那么存储范畴就是 0~2^32 ,如果带符号位的话就是 -2^31 ~ 2^31-1 。 在应用SQLyog工具建表时,除了常见的几个属性Field Name,DataType,Len,Default,PK?,Not Null?,Auto Incr?,Comment之外,还有两个不罕用的Unsigned?和Zerofill?,这两个属性到底有什么用呢? Unsigned:无符号的,意思就是只能为负数,不能为正数。 Zerofill:零填充,意思就是达不到指定长度后,后面用 0 来填充。 当初再来看看这个int(1)中的1到底有什么神秘。这个1跟这个字段能存的数据范畴没关系,它也不是限度这个字段的数据长度的。这个字段存储的数据范畴是由int来限度的。 这个1只是规定了数据的宽度,如果你抉择了Zerofill属性,就能更好地了解这个1了,如果咱们写入的数据达不到这个长度,那么就会在数据后面补0来达到这个长度。比方咱们将int(1)改成int(3),咱们再输出1,实际上显示的是001。所以不论你将 int 类型的长度设为多少并不会影响数据的存储范畴。 mysql对于整型的数据类型,不仅给咱们提供了int,还提供了tinyint,smallint,mediumint和bigint。这些类型存储的数据范畴都是不一样的,具体如下表: 类型字节最小值最大值 (带符号的/无符号的)(带符号的/无符号的)TINYINT1-128127 0255SMALLINT2-3276832767 065535MEDIUMINT3-83886088388607 016777215INT4-21474836482147483647 04294967295BIGINT8-92233720368547758089223372036854775807 018446744073709551615看到这儿,应该曾经分明int(1)的真正含意了。依据理论需要抉择适合的数据类型来存储就能够了。 再来聊一聊一个常见的面试题:int类型做自增主键有没有可能存储完?必定是有的,都有数据范畴了,主键始终增长必定有可能会达到这个范畴。很多小伙伴是不是心中飘过一万匹草泥马,忙着批改数据库去了。这其实大可不必放心,这个数字大略是42亿。如果数据量够够够够大,你抉择bigint做为自增主键必定没啥问题。这个数字我曾经读不进去了,交给评论区的你们来读! > 如果感觉文章不错,欢送点赞、留言> 关注公众号《Java旅途》,每日推送精品文章

August 13, 2020 · 1 min · jiezi

关于mysql:MySQL-备份与恢复-基础概念

1、简介数据无价,MySQL作为一个数据库系统,其备份天然也是十分重要且有必要去做。备份的理由千千万,预防故障,平安需要,回滚,审计,删了又改的需要等等,备份的重要性显而易见。除了备份自身,如何应用备份来复原服务也是一项重点内容,不能用来复原的备份没有意义。本文次要会针对备份和复原这两方面做一些简略的介绍。 本文为《高性能MySQL》备份相干章节的读书笔记。2、备份和复原的简略定义正如简介所说,备份人尽皆知,也很容易引起人的器重。依据需要写定期脚本,或者应用其余形式都是比拟常见的。然而复原就没有那么引人注目了。比如说,兴许会每周/每天定期进行主动备份。然而多久会进行一次备份的复原测试?备份的内容是否实现?是否可用于复原?如果呈现故障,复原的流程是否易操作?备份只是数据源,如何应用数据源,彻底复原零碎这个过程。也十分重要。备份与复原,都是MySQL运维中须要把握的内容。 备份的意义在于复原。如果不能复原,那就不叫备份(比方RAID阵列不是备份,如果DROP DATABASE,RAID阵列不能复原)[还原] 和 [复原] 的区别: 还原:仅指将备份文件中的内容提取进去并加载。复原:包含还原备份文件在内的一系列措施,目标是让服务恢复正常运行,比方重启MySQL,批改配置等其余操作。也就是说,复原是要复原到异样出前,采取的所有操作(比方批改参数,重启服务等)。不仅仅只是还原备份。3、复原打算须要思考的几个因素复原打算在设计的时候,须要思考一些因素,从而依据不同的需要进行更好的布局。能够依据RPO(复原点指标)和RTO(复原工夫指标)这两个需要来帮助制订适合的复原策略。 RPO(复原点指标):能够容忍失落多少数据?(须要复原所有数据,还是能容忍上一次备份以来的数据失落?)RTO(复原工夫指标):须要期待多久将数据恢复?(用户能承受到什么水平)兴许还需思考:须要复原什么?(整个服务器,单个库,单个表,还是事务)其次,复原打算须要定期进行测试,抽出数据测试备份的确无效、理论进行一次残缺的备份复原,相熟整个复原流程,确保真正产生问题时,能够井井有条的实现复原。 4、备份4.1、备份内容包含什么?最简略的策略就是只备份数据和表定义。然而复原数据库须要更多内容,如果能备份的越短缺,那么复原起来也就更容易。(次要还是依据需要) 比方能够依据理论状况,思考备份如下内容:1、Binlog和InnoDB事务日志。2、主/从库配置文件。3、数据库操作系统配置(cron、脚本、内核参数) 或者说,依据须要进行备份内容的扩大。如果对于数据库复原、甚至重建有很高需要(比方要求更快复原),那么备份更多的内容也必不可少。如果须要有从0复原数据库的能力,那须要做更多工作。4.2、物理备份与逻辑备份备份品种逻辑备份物理备份简介利用mysqldump等命令实现备份间接复制数据库文件长处能够文本编辑,复原简略,应用mysqldump备份灵便。足够直观,备份和复原过程,实质上就是文件的挪动。复原速度更快。MySQL服务器简直不须要执行操作。毛病备份和复原都须要MySQL服务参加、且占用CPU资源。有可能很慢InnoDB的原始文件通常比逻辑备份大得多。物理备份和逻辑备份的一点抉择: 对于大数据库,必须有物理备份。逻辑备份太慢,也可思考基于快照的备份做辅助。对于小数据库,逻辑备份简直就能够了。物理备份简略高效,逻辑备份尽量也要做。【两者都要有,看具体需要和资源分配】其次:除非通过测试,否则不能假如备份可用。比方应用mysqlcheck -A 测试数据库。4.3、Binlog备份Binlog也是备份中的重要一环,因为基于工夫点的复原须要用到它。而且Binlog个别很小,频繁的备份也较容易实现。如果有某个工夫点的数据备份,加上自那当前的所有Binlog,就能够回滚所有变动。 4.3.1、备份Binlog的一些策略 倡议expire_logs_days设置的尽量长,至多超过2次最近的全备份。备份Binlog时,能够应用FLUSH LOGS创立新的Binlog(这样就只须要备份最新的Binlog了) 能够思考将数据和Binlog离开保留,防止同时失落。能够抉择常常备份Binlog或者配置一个 --log_slave_updata的只读备库。须要留神的是,expire_log_days是通过日志文件的批改工夫来判断的,而不是内容。(如果始终只有一个Binlog文件,可能就不会清理)。所以肯定要应用FLUSH LOGS定期刷新Binlog。4.3.2、老Binlog的清理最好应用expire_log_days来进行主动的清理,保留肯定天数。如果须要用cron清理。那么不要应用 find+rm配置的cron清理日志。0 3 * * * /usr/bin/mysql /var/log/mysql -mtime +N -name "mysql-bin.[0-9]"* | xargs rm应用如下cron代替:0 3 * * * /usr/bin/mysql -e "PURGE MASTER LOGS BEFORE CURRENT_DATE - INTERVAL N DAY" 4.3.3、Binlog备份的几点注意事项 增长保留工夫只是一种配置,不代表Binlog自身就不须要备份。Binlog依然须要定期备份,以便能够联合最近的备份应用。须要留神的是,从库也应用Binlog。所以须要辨别从库和备份的Binlog治理。4.4、增量备份与差别备份增量备份:自任意类型备份后,改变的所有内容的备份。差别备份:特指自上次全备份之后,改变的所有内容的备份。 也就是说,差别备份基于全备份。而增量备份基于任意备份(比方某一个指定的差别备份。上面举一个例子:周日进行一次全备份,周一针对周日的全备份做一次差别备份。周二开始就能够有两种抉择:1、基于周日的全备份做备份(差别)。2、基于周一的差别备份做备份(增量)差别备份可选项: 不要备份没有扭转的表。不要备份没有扭转的行尽管这样做差别备份能够进步复原速度。然而全备份还是很有必要的。(全备份能够频率低,然而必须有)。4.5、从库备份在从库中备份,有时候是一个可选项,不会烦扰到主库,防止给主库减少更多的负载。其次,当打算从从库备份的时候,要保留更多信息,比方从库绝对于主库的地位(偏移)等。 首先从库不等于备份,从库和主库数据不匹配是很常见的。其次、从从库备份的确能够加重主库备份时的负载,然而不够好。稳固起见,还是倡议进行主库备份、全备份。4.6、其余注意事项4.6.1、在线备份与离线备份离线备份是最简略最平安的。也是一致性最好的。问题就是,大部分数据库不能承受停机备份。所以根本还是用在线备份,或者说不停机备份 能够思考在业务低峰期进行在线备份,即便负载增大也不会有太大影响。4.6.2、数据一致性数据一致性:对于多个表之间数据的一致性要求。(比方两个逻辑相干的操作分在了两个事务内,而备份在两个事务之间执行,就会导致数据不统一)InnoDB能够在转储一组相干表的时候,开始一个事务,这样能够很大水平上保证数据的一致性。 然而也要留神,如果事务设置的不合理,比方一组相干表的批改分在了两个事务内,这依然会导致数据不统一。(一组表的相干操作须要确保在一个事务内)4.6.3、定期进行备份复原测试,确认整个复原过程须要的资源能复原的备份才有价值,不是有备份就能够 小结本文解说了一些备份的基本知识和概念,包含一些基本概念、复原的重要性、备份和复原的简略策略。还提及到了备份内容的抉择、差别/增量备份、Binlog备份等。后续还须要持续学习,理解备份和复原的具体操作办法和实际。

August 12, 2020 · 1 min · jiezi

关于mysql:MySQL-备份与恢复-基础概念

1、简介数据无价,MySQL作为一个数据库系统,其备份天然也是十分重要且有必要去做。备份的理由千千万,预防故障,平安需要,回滚,审计,删了又改的需要等等,备份的重要性显而易见。除了备份自身,如何应用备份来复原服务也是一项重点内容,不能用来复原的备份没有意义。本文次要会针对备份和复原这两方面做一些简略的介绍。 本文为《高性能MySQL》备份相干章节的读书笔记。2、备份和复原的简略定义正如简介所说,备份人尽皆知,也很容易引起人的器重。依据需要写定期脚本,或者应用其余形式都是比拟常见的。然而复原就没有那么引人注目了。比如说,兴许会每周/每天定期进行主动备份。然而多久会进行一次备份的复原测试?备份的内容是否实现?是否可用于复原?如果呈现故障,复原的流程是否易操作?备份只是数据源,如何应用数据源,彻底复原零碎这个过程。也十分重要。备份与复原,都是MySQL运维中须要把握的内容。 备份的意义在于复原。如果不能复原,那就不叫备份(比方RAID阵列不是备份,如果DROP DATABASE,RAID阵列不能复原)[还原] 和 [复原] 的区别: 还原:仅指将备份文件中的内容提取进去并加载。复原:包含还原备份文件在内的一系列措施,目标是让服务恢复正常运行,比方重启MySQL,批改配置等其余操作。也就是说,复原是要复原到异样出前,采取的所有操作(比方批改参数,重启服务等)。不仅仅只是还原备份。3、复原打算须要思考的几个因素复原打算在设计的时候,须要思考一些因素,从而依据不同的需要进行更好的布局。能够依据RPO(复原点指标)和RTO(复原工夫指标)这两个需要来帮助制订适合的复原策略。 RPO(复原点指标):能够容忍失落多少数据?(须要复原所有数据,还是能容忍上一次备份以来的数据失落?)RTO(复原工夫指标):须要期待多久将数据恢复?(用户能承受到什么水平)兴许还需思考:须要复原什么?(整个服务器,单个库,单个表,还是事务)其次,复原打算须要定期进行测试,抽出数据测试备份的确无效、理论进行一次残缺的备份复原,相熟整个复原流程,确保真正产生问题时,能够井井有条的实现复原。 4、备份4.1、备份内容包含什么?最简略的策略就是只备份数据和表定义。然而复原数据库须要更多内容,如果能备份的越短缺,那么复原起来也就更容易。(次要还是依据需要) 比方能够依据理论状况,思考备份如下内容:1、Binlog和InnoDB事务日志。2、主/从库配置文件。3、数据库操作系统配置(cron、脚本、内核参数) 或者说,依据须要进行备份内容的扩大。如果对于数据库复原、甚至重建有很高需要(比方要求更快复原),那么备份更多的内容也必不可少。如果须要有从0复原数据库的能力,那须要做更多工作。4.2、物理备份与逻辑备份备份品种逻辑备份物理备份简介利用mysqldump等命令实现备份间接复制数据库文件长处能够文本编辑,复原简略,应用mysqldump备份灵便。足够直观,备份和复原过程,实质上就是文件的挪动。复原速度更快。MySQL服务器简直不须要执行操作。毛病备份和复原都须要MySQL服务参加、且占用CPU资源。有可能很慢InnoDB的原始文件通常比逻辑备份大得多。物理备份和逻辑备份的一点抉择: 对于大数据库,必须有物理备份。逻辑备份太慢,也可思考基于快照的备份做辅助。对于小数据库,逻辑备份简直就能够了。物理备份简略高效,逻辑备份尽量也要做。【两者都要有,看具体需要和资源分配】其次:除非通过测试,否则不能假如备份可用。比方应用mysqlcheck -A 测试数据库。4.3、Binlog备份Binlog也是备份中的重要一环,因为基于工夫点的复原须要用到它。而且Binlog个别很小,频繁的备份也较容易实现。如果有某个工夫点的数据备份,加上自那当前的所有Binlog,就能够回滚所有变动。 4.3.1、备份Binlog的一些策略 倡议expire_logs_days设置的尽量长,至多超过2次最近的全备份。备份Binlog时,能够应用FLUSH LOGS创立新的Binlog(这样就只须要备份最新的Binlog了) 能够思考将数据和Binlog离开保留,防止同时失落。能够抉择常常备份Binlog或者配置一个 --log_slave_updata的只读备库。须要留神的是,expire_log_days是通过日志文件的批改工夫来判断的,而不是内容。(如果始终只有一个Binlog文件,可能就不会清理)。所以肯定要应用FLUSH LOGS定期刷新Binlog。4.3.2、老Binlog的清理最好应用expire_log_days来进行主动的清理,保留肯定天数。如果须要用cron清理。那么不要应用 find+rm配置的cron清理日志。0 3 * * * /usr/bin/mysql /var/log/mysql -mtime +N -name "mysql-bin.[0-9]"* | xargs rm应用如下cron代替:0 3 * * * /usr/bin/mysql -e "PURGE MASTER LOGS BEFORE CURRENT_DATE - INTERVAL N DAY" 4.3.3、Binlog备份的几点注意事项 增长保留工夫只是一种配置,不代表Binlog自身就不须要备份。Binlog依然须要定期备份,以便能够联合最近的备份应用。须要留神的是,从库也应用Binlog。所以须要辨别从库和备份的Binlog治理。4.4、增量备份与差别备份增量备份:自任意类型备份后,改变的所有内容的备份。差别备份:特指自上次全备份之后,改变的所有内容的备份。 也就是说,差别备份基于全备份。而增量备份基于任意备份(比方某一个指定的差别备份。上面举一个例子:周日进行一次全备份,周一针对周日的全备份做一次差别备份。周二开始就能够有两种抉择:1、基于周日的全备份做备份(差别)。2、基于周一的差别备份做备份(增量)差别备份可选项: 不要备份没有扭转的表。不要备份没有扭转的行尽管这样做差别备份能够进步复原速度。然而全备份还是很有必要的。(全备份能够频率低,然而必须有)。4.5、从库备份在从库中备份,有时候是一个可选项,不会烦扰到主库,防止给主库减少更多的负载。其次,当打算从从库备份的时候,要保留更多信息,比方从库绝对于主库的地位(偏移)等。 首先从库不等于备份,从库和主库数据不匹配是很常见的。其次、从从库备份的确能够加重主库备份时的负载,然而不够好。稳固起见,还是倡议进行主库备份、全备份。4.6、其余注意事项4.6.1、在线备份与离线备份离线备份是最简略最平安的。也是一致性最好的。问题就是,大部分数据库不能承受停机备份。所以根本还是用在线备份,或者说不停机备份 能够思考在业务低峰期进行在线备份,即便负载增大也不会有太大影响。4.6.2、数据一致性数据一致性:对于多个表之间数据的一致性要求。(比方两个逻辑相干的操作分在了两个事务内,而备份在两个事务之间执行,就会导致数据不统一)InnoDB能够在转储一组相干表的时候,开始一个事务,这样能够很大水平上保证数据的一致性。 然而也要留神,如果事务设置的不合理,比方一组相干表的批改分在了两个事务内,这依然会导致数据不统一。(一组表的相干操作须要确保在一个事务内)4.6.3、定期进行备份复原测试,确认整个复原过程须要的资源能复原的备份才有价值,不是有备份就能够 小结本文解说了一些备份的基本知识和概念,包含一些基本概念、复原的重要性、备份和复原的简略策略。还提及到了备份内容的抉择、差别/增量备份、Binlog备份等。后续还须要持续学习,理解备份和复原的具体操作办法和实际。

August 12, 2020 · 1 min · jiezi

关于mysql:一条Sql查询MySql数据存储状况

0x00.小声逼逼DBA和运维的同学都晓得Mysql的性能问题,每次去客户调研零碎现状都会看下数据状况,个别我会先查看下存储、索引和数据条数。 0x01.上面是SqlSELECT ISS.SCHEMA_NAME AS 'SCHEMA_NAME',ITS.TABLE_NAME AS 'TABLE_NAME',(ITS.DATA_LENGTH / 1024 / 1024) AS 'DATA (MB)',(ITS.INDEX_LENGTH / 1024 / 1024) AS 'INDEX (MB)',((ITS.DATA_LENGTH + ITS.INDEX_LENGTH) / 1024 / 1024) AS 'DATA + INDEX (MB)',ITS.TABLE_ROWS AS 'TOTAL_ROW'FROM information_schema.`TABLES` ITSRIGHT JOINinformation_schema.SCHEMATA ISS ON ITS.TABLE_SCHEMA = ISS.SCHEMA_NAMEWHERE ISS.SCHEMA_NAME = ${DATABASE_NAME}ORDER BY 4 DESC, ISS.SCHEMA_NAME, ITS.TABLE_NAME; over

August 12, 2020 · 1 min · jiezi

关于mysql:MSql忘记密码后如何修改密码

经常性的,会有人遗记本人的mysql明码,在这里教大家一种不必明码登陆mysql批改明码的办法 步骤一:从运行窗口输出 services.msc 步骤二:进入服务界面,从外面找到MySql,右键进行 步骤三:关上MySql装置门路(若遗记装置门路能够从服务中右键属性查看) 关上bin目录 步骤四:复制门路到cmd窗口,按回车 输出mysqld --skip-grant-tables命令,若bin目录下不存在mysqld,则查看是否有mysqld-nt,若只有mysql-nt,则输出这个命令mysqld-nt --skip-grant-tables 此时该命令窗口会进入一个无奈输出的状态,关上一个新的cmd窗口 步骤五:在新的cmd窗口输出mysql,回车咱们会发现间接能进入mysql数据库,这时候咱们就能够改明码啦 用命令进入mysql数据库 输出select user,host,password from user; 执行更新明码语句update user set password=password('123456') where user='root' and host='localhost';'123456'地位是你要改的明码 步骤六:此时明码就改好啦,能够欢快的登陆mysql啦别忘了从服务中关上mysql哟~

August 11, 2020 · 1 min · jiezi

关于mysql:centos7-mysql56-配置主从同步

一、装置环境数据库地址:* 192.168.0.212(主) * 192.168.0.221(从) 二、Master的配置1.批改MySQL配置文件[root@localhost ~]# vim /etc/my.cnf[mysqld]#开启二进制日志log-bin=mysql-bin#标识惟一id(必须),个别应用ip最初位server-id=212#不同步的数据库,可设置多个binlog-ignore-db=mysql#指定须要同步的数据库(和slave是互相匹配的),能够设置多个binlog-do-db = xxxx_dt_businessbinlog-do-db = xxxx_dt_homebinlog_format=MIXED#日志清理工夫expire_logs_days=7#日志大小max_binlog_size=200m#缓存大小binlog_cache_size=4m#最大缓存大小max_binlog_cache_size=521m2.重启MySQL[root@localhost ~]# mysql -u root -p#给从库放权限 mysql> GRANT FILE ON _._ TO 'xxxxrep'@'192.168.0.221' IDENTIFIED BY 'xxxxrep123.'; Query OK, 0 rows affected (0.00 sec)mysql> GRANT REPLICATION SLAVE ON _._ TO 'xxxxrep'@'192.168.0.221' IDENTIFIED BY 'xxxxrep123.'; Query OK, 0 rows affected (0.00 sec)mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec)注:如果数据库有数据须要进行数据迁徙保证数据的一致性 数据迁徙创立数据库: 在从库中创立一个和主库雷同的数据库,不然两个数据库不能同步(进行过数据迁徙就跳过)CREATE DATABASE xxxx_dt_home CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE xxxx_dt_business CHARACTER SET utf8 COLLATE utf8_general_ci;4.重启MySQL,登录MySQL,查看主库信息mysql> show master status; +------------------+----------+---------------------------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+---------------------------------+------------------+-------------------+ | mysql-bin.000149 | 1670048 | xxxx_dt_business,xxxx_dt_home | | | +------------------+----------+---------------------------------+------------------+-------------------+ 1 row in set (0.00 sec)mysql> 注:如果执行这个步骤始终为Empty set(0.00 sec),那阐明后面的my.cnf没配置对#开启二进制日志(能够不配置)log-bin=mysql-bin server-id=221 replicate-do-db= xxxx_dt_business replicate-do-db = xxxx_dt_home replicate-ignore-db = mysql log-slave-updates slave-skip-errors = all slave-net-timeout = 60#敞开Slave mysql> change master to master_host='192.168.0.212',master_user='xxxxrep',master_password='xxxxrep123.',master_log_file='mysql-bin.000149', master_log_pos=33345737; Query OK, 0 rows affected, 2 warnings (0.01 sec)mysql> start slave; Query OK, 0 rows affected (0.00 sec) 注:下面的master_log_file是在配置Master的时候的File字段, master_log_pos是在配置Master的Position 字段。肯定要一一对应5.查看信息mysql> show slave status \G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.0.212 Master_User: xxxxrep Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000149 Read_Master_Log_Pos: 44484424 Relay_Log_File: mysql-relay-bin.000002 Relay_Log_Pos: 11138970 Relay_Master_Log_File: mysql-bin.000149 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: xxxx_dt_business,xxxx_dt_home Replicate_Ignore_DB: mysql Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 44484424 Relay_Log_Space: 11139143 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 212 Master_UUID: 7e1414e2-8dd5-11e9-a10f-000c29f686d6 Master_Info_File: /data/mysql/data/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 1 row in set (0.00 sec)ERROR: No query specified 注:如果Slave_IO_Running: No 呈现上面的谬误Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. 阐明主服务器的UUID和从服务器的UUID反复,更改形式[root@localhost ~]# vim /usr/local/mysql/data/auto.cnf #这是我的装置门路批改auto.cnf的server-uuid 注:如果Slave_IO_Running: Connecting 并呈现上面谬误 error connecting to master ['root@192.168.3.28]('root@192.168.3.28):3306' - retry-time: 60 retries: 1 解决办法,查看主库是否受权,查看change master to... 是否有用户明码ip填写谬误 注:如果Slave_IO_Running: No 呈现上面谬误Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file' 解决办法:复位mysql>stop slave; //进行 mysql>reset slave; //清空 mysql>start slave; //开启扩大当只针对某些库的某张表进行同步时,如下,只同步home库的hello表和other库的biao表: replicate-do-db = home replicate-wild-do-table = home.hello //当只同步几个或多数表时,能够这样设置。留神这要跟下面的库指定配合应用; replicate-do-db = other replicate-wild-do-table = other.biao //如果同步的库的表比拟多时,就不能这样一一指定了,就把这个选项配置去掉,间接依据指定的库进行同步。查问binlog主从日志的办法#查看binlog全副文件 mysql>show binary logs;#查看binlog是否开启NO为开启 mysql> show variables like 'log_bin%';#详细信息 mysql> show variables like 'binlog%';#查看binlog日志 mysql> show binlog events in'mysql-bin.000017';#或者应用mysqlbinlog,如果报错应用--no-defaults(应用全门路) [root@localhost ~]# /usr/local/mysql/bin/mysqlbinlog --no-defaults /usr/local/mysql/data/mysql-bin.000017 手动清理master日志,最好敞开日志,在/etc/my.cnf#手动刷新日志 mysql> show master status; #删除全副mysql> reset slave;或 rest master;#删除MySQL-bin.011mysql> PURGE MASTER LOGS TO 'MySQL-bin.011';mysql> show status like 'Innodb_buffer_pool_%'; +---------------------------------------+--------------------------------------------------+ | Variable_name | Value | +---------------------------------------+--------------------------------------------------+ | Innodb_buffer_pool_dump_status | not started | | Innodb_buffer_pool_load_status | Buffer pool(s) load completed at 200320 16:18:07 | | Innodb_buffer_pool_pages_data | 93721 | | Innodb_buffer_pool_bytes_data | 1535524864 | | Innodb_buffer_pool_pages_dirty | 0 | | Innodb_buffer_pool_bytes_dirty | 0 | | Innodb_buffer_pool_pages_flushed | 328774 | | Innodb_buffer_pool_pages_free | 37327 | | Innodb_buffer_pool_pages_misc | 16 | | Innodb_buffer_pool_pages_total | 131064 | | Innodb_buffer_pool_read_ahead_rnd | 0 | | Innodb_buffer_pool_read_ahead | 28 | | Innodb_buffer_pool_read_ahead_evicted | 0 | | Innodb_buffer_pool_read_requests | 27973283 | | Innodb_buffer_pool_reads | 90917 | | Innodb_buffer_pool_wait_free | 0 | | Innodb_buffer_pool_write_requests | 1205702 | +---------------------------------------+--------------------------------------------------+ 17 rows in set

August 11, 2020 · 3 min · jiezi

关于mysql:centos7-mysql56-配置主从同步

一、装置环境数据库地址:* 192.168.0.212(主) * 192.168.0.221(从) 二、Master的配置1.批改MySQL配置文件[root@localhost ~]# vim /etc/my.cnf[mysqld]#开启二进制日志log-bin=mysql-bin#标识惟一id(必须),个别应用ip最初位server-id=212#不同步的数据库,可设置多个binlog-ignore-db=mysql#指定须要同步的数据库(和slave是互相匹配的),能够设置多个binlog-do-db = xxxx_dt_businessbinlog-do-db = xxxx_dt_homebinlog_format=MIXED#日志清理工夫expire_logs_days=7#日志大小max_binlog_size=200m#缓存大小binlog_cache_size=4m#最大缓存大小max_binlog_cache_size=521m2.重启MySQL[root@localhost ~]# mysql -u root -p#给从库放权限 mysql> GRANT FILE ON _._ TO 'xxxxrep'@'192.168.0.221' IDENTIFIED BY 'xxxxrep123.'; Query OK, 0 rows affected (0.00 sec)mysql> GRANT REPLICATION SLAVE ON _._ TO 'xxxxrep'@'192.168.0.221' IDENTIFIED BY 'xxxxrep123.'; Query OK, 0 rows affected (0.00 sec)mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec)注:如果数据库有数据须要进行数据迁徙保证数据的一致性 数据迁徙创立数据库: 在从库中创立一个和主库雷同的数据库,不然两个数据库不能同步(进行过数据迁徙就跳过)CREATE DATABASE xxxx_dt_home CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE xxxx_dt_business CHARACTER SET utf8 COLLATE utf8_general_ci;4.重启MySQL,登录MySQL,查看主库信息mysql> show master status; +------------------+----------+---------------------------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+---------------------------------+------------------+-------------------+ | mysql-bin.000149 | 1670048 | xxxx_dt_business,xxxx_dt_home | | | +------------------+----------+---------------------------------+------------------+-------------------+ 1 row in set (0.00 sec)mysql> 注:如果执行这个步骤始终为Empty set(0.00 sec),那阐明后面的my.cnf没配置对#开启二进制日志(能够不配置)log-bin=mysql-bin server-id=221 replicate-do-db= xxxx_dt_business replicate-do-db = xxxx_dt_home replicate-ignore-db = mysql log-slave-updates slave-skip-errors = all slave-net-timeout = 60#敞开Slave mysql> change master to master_host='192.168.0.212',master_user='xxxxrep',master_password='xxxxrep123.',master_log_file='mysql-bin.000149', master_log_pos=33345737; Query OK, 0 rows affected, 2 warnings (0.01 sec)mysql> start slave; Query OK, 0 rows affected (0.00 sec) 注:下面的master_log_file是在配置Master的时候的File字段, master_log_pos是在配置Master的Position 字段。肯定要一一对应5.查看信息mysql> show slave status \G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.0.212 Master_User: xxxxrep Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000149 Read_Master_Log_Pos: 44484424 Relay_Log_File: mysql-relay-bin.000002 Relay_Log_Pos: 11138970 Relay_Master_Log_File: mysql-bin.000149 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: xxxx_dt_business,xxxx_dt_home Replicate_Ignore_DB: mysql Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 44484424 Relay_Log_Space: 11139143 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 212 Master_UUID: 7e1414e2-8dd5-11e9-a10f-000c29f686d6 Master_Info_File: /data/mysql/data/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 1 row in set (0.00 sec)ERROR: No query specified 注:如果Slave_IO_Running: No 呈现上面的谬误Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. 阐明主服务器的UUID和从服务器的UUID反复,更改形式[root@localhost ~]# vim /usr/local/mysql/data/auto.cnf #这是我的装置门路批改auto.cnf的server-uuid 注:如果Slave_IO_Running: Connecting 并呈现上面谬误 error connecting to master ['root@192.168.3.28]('root@192.168.3.28):3306' - retry-time: 60 retries: 1 解决办法,查看主库是否受权,查看change master to... 是否有用户明码ip填写谬误 注:如果Slave_IO_Running: No 呈现上面谬误Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file' 解决办法:复位mysql>stop slave; //进行 mysql>reset slave; //清空 mysql>start slave; //开启扩大当只针对某些库的某张表进行同步时,如下,只同步home库的hello表和other库的biao表: replicate-do-db = home replicate-wild-do-table = home.hello //当只同步几个或多数表时,能够这样设置。留神这要跟下面的库指定配合应用; replicate-do-db = other replicate-wild-do-table = other.biao //如果同步的库的表比拟多时,就不能这样一一指定了,就把这个选项配置去掉,间接依据指定的库进行同步。查问binlog主从日志的办法#查看binlog全副文件 mysql>show binary logs;#查看binlog是否开启NO为开启 mysql> show variables like 'log_bin%';#详细信息 mysql> show variables like 'binlog%';#查看binlog日志 mysql> show binlog events in'mysql-bin.000017';#或者应用mysqlbinlog,如果报错应用--no-defaults(应用全门路) [root@localhost ~]# /usr/local/mysql/bin/mysqlbinlog --no-defaults /usr/local/mysql/data/mysql-bin.000017 手动清理master日志,最好敞开日志,在/etc/my.cnf#手动刷新日志 mysql> show master status; #删除全副mysql> reset slave;或 rest master;#删除MySQL-bin.011mysql> PURGE MASTER LOGS TO 'MySQL-bin.011';mysql> show status like 'Innodb_buffer_pool_%'; +---------------------------------------+--------------------------------------------------+ | Variable_name | Value | +---------------------------------------+--------------------------------------------------+ | Innodb_buffer_pool_dump_status | not started | | Innodb_buffer_pool_load_status | Buffer pool(s) load completed at 200320 16:18:07 | | Innodb_buffer_pool_pages_data | 93721 | | Innodb_buffer_pool_bytes_data | 1535524864 | | Innodb_buffer_pool_pages_dirty | 0 | | Innodb_buffer_pool_bytes_dirty | 0 | | Innodb_buffer_pool_pages_flushed | 328774 | | Innodb_buffer_pool_pages_free | 37327 | | Innodb_buffer_pool_pages_misc | 16 | | Innodb_buffer_pool_pages_total | 131064 | | Innodb_buffer_pool_read_ahead_rnd | 0 | | Innodb_buffer_pool_read_ahead | 28 | | Innodb_buffer_pool_read_ahead_evicted | 0 | | Innodb_buffer_pool_read_requests | 27973283 | | Innodb_buffer_pool_reads | 90917 | | Innodb_buffer_pool_wait_free | 0 | | Innodb_buffer_pool_write_requests | 1205702 | +---------------------------------------+--------------------------------------------------+ 17 rows in set

August 11, 2020 · 3 min · jiezi

关于mysql:MySQL5731压缩包zip安装步骤

1、下载MySQL压缩包5.7.31下载地址:https://dev.mysql.com/downloads/mysql/ 抉择mysql.5.7.31.winx64.zip下载2、下载实现解压至以后文件夹并且在MySQL目录下新建一个my.ini的文件并保留 3、以管理员身份运行命令行工具并且切换到MySQL的bin目录下4、输出命令mysqld -install 5、输出命令mysqld --initialize-insecure --user=mysql 此时MySQL目录下会多一个data的文件夹 进入data文件夹 6、启动服务net start mysql并批改明码 7、登录MySQL,输出mysql -u root -p,此时没有设置明码,持续回车8、批改明码,输出update mysql.user set authentication_string=password('123456') where user='root' and Host='localhost'; 9、刷新权限 flush privileges; 10、正文或删除my.ini的最初一行 11、重启服务net stop mysql ,net start mysql,登录胜利!

August 10, 2020 · 1 min · jiezi

关于mysql:MySQL-explain-应用详解吐血整理????

什么是explain应用优化器能够模仿优化器执行SQL查问语句,从而晓得MySQL怎么解决你的SQL语句的,剖析你的查问语句和表构造的性能瓶颈。 explain可能干什么读取表的程序哪些索引可能被应用数据读取操作的操作类型哪些索引可能被理论应用表之间的援用每张表有多少行被物理查问创立一个学习用的数据库CREATE DATABASE /*!32312 IF NOT EXISTS*/`mydb` /*!40100 DEFAULT CHARACTER SET utf8 */;USE `mydb`;/*Table structure for table `course` */DROP TABLE IF EXISTS `course`;CREATE TABLE `course` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;/*Data for the table `course` */insert into `course`(`id`,`name`) values (1,'语文'),(2,'高等数学'),(3,'视听说'),(4,'体育'),(5,'马克思详情'),(6,'民族实践'),(7,'毛中特'),(8,'计算机根底'),(9,'深度学习'),(10,'Java程序设计'),(11,'c语言程序设计'),(12,'操作系统'),(13,'计算机网络'),(14,'计算机组成原理'),(15,'数据结构'),(16,'数据分析'),(17,'大学物理'),(18,'数字逻辑'),(19,'嵌入式开发'),(20,'需要工程');/*Table structure for table `stu_course` */DROP TABLE IF EXISTS `stu_course`;CREATE TABLE `stu_course` ( `sid` int(10) NOT NULL, `cid` int(10) NOT NULL, PRIMARY KEY (`sid`,`cid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;/*Data for the table `stu_course` */insert into `stu_course`(`sid`,`cid`) values (1,2),(1,4),(1,14),(1,16),(1,19),(2,4),(2,8),(2,9),(2,14),(3,13),(3,14),(3,20),(4,5),(4,8),(4,9),(4,11),(4,16),(5,4),(5,8),(5,9),(5,11),(5,12),(5,16),(6,2),(6,14),(6,17),(7,1),(7,8),(7,15),(8,2),(8,3),(8,7),(8,17),(9,1),(9,7),(9,16),(9,20),(10,4),(10,12),(10,14),(10,20),(11,3),(11,9),(11,16),(12,3),(12,7),(12,9),(12,12),(13,1),(13,5),(13,13),(14,1),(14,3),(14,18),(15,1),(15,9),(15,15),(16,2),(16,7);/*Table structure for table `student` */DROP TABLE IF EXISTS `student`;CREATE TABLE `student` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, `age` int(2) DEFAULT NULL, PRIMARY KEY (`id`), KEY `name` (`name`), KEY `name_age` (`name`,`age`), KEY `id_name_age` (`id`,`name`,`age`)) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8;/*Data for the table `student` */insert into `student`(`id`,`name`,`age`) values (25,'乾隆',17),(14,'关羽',43),(13,'刘备',12),(28,'刘永',12),(21,'后嗣',12),(30,'吕子乔',28),(18,'嬴政',76),(22,'孙悟空',21),(4,'安其拉',24),(6,'宋江',22),(26,'康熙',51),(29,'张伟',26),(20,'张郃',12),(12,'张飞',32),(27,'朱元璋',19),(11,'李世民',54),(9,'李逵',12),(8,'林冲',43),(5,'橘右京',43),(24,'沙和尚',25),(23,'猪八戒',22),(15,'王与',21),(19,'王建',23),(10,'王莽',43),(16,'秦叔宝',43),(17,'程咬金',65),(3,'荆轲',21),(2,'诸葛亮',71),(7,'钟馗',23),(1,'鲁班',21);这个数据库实际上的业务是:学生表 - 选课表 - 课程表 ...

August 10, 2020 · 6 min · jiezi