MYSQL
文章平均质量分 57
匿_名_用_户
这个作者很懒,什么都没留下…
展开
-
MYSQL中的INFORMATION_SCHEMA数据库简介
INFORMATION_SCHEMA 是 MySQL存放元数据的一个数据库,它里面有很多只读的表(实际上是视图,因此没有对应的文件),这个库里的表和很多和SHOW 语句是对应的,比如show databases, show tables等。常见的表如下:character_sets,展示可用的字符集,对应 SHOW CHARACTER SET COLLATIONS ,展示字符集对应的 COLLATIONS ,对应 SHOW COLLATION COLUMNS,展示表的列的信息,对应 SHOW .原创 2021-10-15 21:19:51 · 593 阅读 · 0 评论 -
MySQL: 为什么使用 innobackupex 备份恢复搭建主从时,必须人为设置 gtid_purged 变量
问题描述:使用innobackupex 搭建主从的步骤如下:主库使用 innobackupex 备份并 apply-log 将备份文件拷贝至从库,从库清空datadir目录,并使用 innobackupex 进行 copy-back 从库根据备份目录中的 xtrabackup_binlog_info 的GTID信息来设置 gtid_purged 变量。 从库 change master 并 start slave.在下面的场景中,确少了第3步,导致主从数据发生了不一致:1. 主库上创建表原创 2021-10-07 18:11:16 · 1689 阅读 · 0 评论 -
MySQL: GTID简介,gtid_executed和gtid_purged概念
GTID:全称:global transaction identifier何时产生:当一个事务提交时,就会分配一个GTID(前提是事务有写入到binlog),GTID单调递增且连续。GTID格式:GTID = source_id:transaction_id其中 source_id 一般指 source 的 server_uuid , 示例:3E11FA47-71CA-11E1-9E33-C80AA9429562:23关于server_uuid,可以参考文章 https:.原创 2021-10-07 17:33:12 · 7914 阅读 · 0 评论 -
MySQL中 server_uuid 简介
从MySQL 5.7开始有一个 server_uuid 的概念, MySQL启动的时候会尝试从 data_dir/auto.cnf中读取该变量,如果 data_dir/auto.cnf 不存在,那么MySQL会自动产生一个,并存放至该文件中。示例:JCFW1PJD:/mysqldatadir/data # cat auto.cnf[auto]server-uuid=b0dd0ee8-ffd9-11e9-8d1c-005056aa8c82在MySQL集群中,每台机器的 server_uuid都.原创 2021-10-06 15:41:07 · 3653 阅读 · 0 评论 -
MySQL备份工具innobackupex简介
innobackupex是一款MySQL备份工具,备份速度快(通过直接copy文件),而且支持压缩、流式传输、加密等功能。其主要原理如下图(图片源于网络)备份开始便会有一个独立的线程追踪 redo log 。同时开始复制ibd文件,复制完成后会发出 FLUSH TABLES WITH READ LOCK 命令,之后再复制 frm,MYD 等文件,完成后会停止追踪 redo log 并 UNLOCK TABLES 。innobackupex 备份恢复主要分3步,第1步备份文件,第2步是a.原创 2021-10-06 15:25:50 · 5162 阅读 · 0 评论 -
MySQL 默认字符集建议:使用 utf8mb4 ,而非 utf8
MySQL 中 utf8 最多使用3个字节(bytes)来存放一个字符,因此和utf8mb3是一个意思。而 utf8mb4 是 utf8mb3 的超集,最多允许使用4个字符来存放字符。在实践中,建议使用 utf8mb4 来作为默认的字符集,如果使用 utf8 ,可能有很多生僻字,比如"????","????","????"等无法输入到 MySQL 数据库(会类似如下报错: ERROR 1366 (HY000): Incorrect string value: '\xF0\xA0\x86\xB7' for原创 2021-10-03 21:33:13 · 4654 阅读 · 0 评论 -
MySQL: 在不知道用户密码的情况下新增IP白名单
MySQL运维时,一个最常见的需求就是新增用户的IP白名单,比如有一个用户usera, 原来的host列表有 197.0.1.100,197.0.1.101 ,即有两个用户:usera@197.0.1.100usera@197.0.1.101现在想增加一个IP, 即创建用户usera@197.0.1.102 ,这个用户的密码、权限都和前两个用户一致。问题是作为DBA并不掌握该用户之前的密码,这时候怎么办?可以使用 show create user 命令来查看加密之后的密码,示例:mysql原创 2021-10-03 17:22:58 · 296 阅读 · 0 评论 -
DB2迁移MySQL注意事项:MySQL中字符串比较时默认不区分大小写
在DB2数据库中,字符/字符串比较的时候,默认是区分大小写的,即'abc'和'ABC'是两个不同的字符串,但在 MySQL中,默认是不区分大小写的,因此迁移的时候需要注意。示例1中,可以看到'abc' 和 'ABC' 在innodb中存放的数据是不一样的,但比较的时候认为是一样的mysql> create table mqs1(col1 char(20)) CHARSET=utf8mb4;Query OK, 0 rows affected (0.26 sec)mysql> ins原创 2021-10-02 21:39:40 · 707 阅读 · 3 评论 -
MySQL:show processlist中COMMAND为Query状态的SQL并不一定在执行
问题:MySQL数据库中 show processlist 命令或者 information_schema.processlist的输出中,如果COMMAND为Query,并不代表它就是真的处于执行状态。事实上,它可能还没有进入到innodb,而是在排队。如果真想看正在innodb里执行的SQL,可以查看表 information_schema.innodb_trx ,这个表展示的是已经进入到 innodb 的事务的状态。这个问题比较容易重现,假设表 sbtest.mqs 中有一定数量的记录,可以使用下原创 2021-10-02 21:36:32 · 2148 阅读 · 0 评论 -
MySQL中 datetime类型精度提示:需要精确到微秒请不要直接使用datetime类型。
MySQL中的默认的datatime类型所控制的精度是不包含到毫秒的,它即包含date,也包含time,即:'YYYY-MM-DD hh:mm:ss' , 取值范围 为'1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'那么问题来了:1. 如果插入的数据带有毫秒,那么会成功吗?如果成功,毫秒部分如何处理?是直接丢弃还是舍入?2. 如果想让数据更加精确,包含1-6位毫秒,怎么办?对于问题1的答案是:会成功,毫秒部分不会直接丢弃,会舍入(rounding原创 2021-10-01 21:16:30 · 7962 阅读 · 2 评论 -
Db2迁移至MySQL时timestamp列的处理
问题描述:Db2迁移至MySQL数据库时,源表DB2有一列是timestamp类型的,目标表MySQL该字段也是timestamp类型的,迁移数据库的时候报错了,插入不了。原因分析:MySQL中timestamp类型取值范围比较小,只有从'1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC,源表中有数据超出了这个范围,因此插入失败。建议在MySQL使用datetime/datatime(6)类型来代理。具体datetime还是da原创 2021-10-01 20:35:25 · 715 阅读 · 0 评论 -
ERROR 2013 (HY000): Lost connect to MySQL server at ‘waiting for initial communication packet‘
环境:MySQL 5.7.17问题现象:在启动mysqld进程一小段时间之后,执行连接MySQL数据库报错:ERROR 2013 (HY000): Lost connect to MySQL server at 'waiting for initial communication packet', system error: 110在什么都没有做的情况下,过一段时间再次尝试连接,就没问题了。问题分析与解决:通过查看mysql的错误日志,可以发现一个关键的信息 "ready...原创 2021-04-22 21:33:07 · 1441 阅读 · 0 评论 -
linux:使用shell读写MySQL数据库
linux:使用shell读写MySQL数据库本文用一个示例,简单演示了如何使用shell脚本读写MySQL数据库。主要工作如下:1. 创建数据库samplecreate database sample;2. 创建表employeedrop table if exists employee;create table employee(EMPNO char(6原创 2017-08-27 23:12:34 · 1501 阅读 · 0 评论 -
MySQL InnoDb中的 Clustered Index 和 Secondary Index
MySQL InnoDb中的 Clustered Index 和 Secondary IndexMySQL InnoDb中的索引分为Clustered Index (聚簇索引)和 Secondary Index(二级索引)Clustered Index:每一个InnoDB表都有一个特殊的索引,叫做clustered index,通常来讲,clustered index和prim原创 2017-09-17 19:25:51 · 7498 阅读 · 1 评论 -
MySQL InnoDB中的四种隔离级别
MySQL InnoDB中实现了四种隔离级别-read uncommitted 应用可以读取到其他应用未提交的数据-read committed 应用只能读取其他应用已经提交的数据-repeatable read 应用保证同一事务中,每次读取的数据都是一样的-serializable 强制序列化读写操作,即不允许读写操作同时进行文章主要使用例子来说明四种隔离级别,假设有以下原创 2017-09-17 19:30:14 · 713 阅读 · 0 评论 -
MySQL InnoDB中唯一索引和非唯一索引时的加锁情况
MySQL InnoDB中唯一索引和非唯一索引时的加锁情况MySQL的默认隔离级别为RR,这篇文章讨论一下唯一索引和非唯一索引时,使用lock read(consistent read不加锁,不讨论)时的不同的加锁策略。 前提条件是使用了RR隔离级别,并且使用了索引扫描。假设有以下表的定义和数据:mysql> create table test1 (year int);my原创 2017-09-18 23:00:23 · 12022 阅读 · 2 评论 -
MySQL InnoDB中的consistent read和Locking Reads
MySQL InnoDB中的consistent read和Locking ReadsMySQL InnoDB中的read 操作分为consistent read和Locking Reads,前者不需要对读取到的行加锁,后者需要加锁。consistent readconsistent read 根据某个时间点的snapshot信息来返回结果。如果查询的数据被其他的事务修改了,那原创 2017-09-18 23:12:15 · 2225 阅读 · 0 评论 -
MySQL中的通用查询日志(General Query Log)
MySQL中的通用查询日志(General Query Log)1. 以什么形式来记录?log_output系统变量来决定的,可选值 TABLE, FILE, 或者 NONE,默认值是FILE,可以同时选择TABLE和FILE,中间用逗号隔开。2. 如何开启?设置general_log系统变量,设置为ON,OFF3. 具体写到哪里?如果是写到文件里,由gener原创 2017-09-18 23:16:06 · 2187 阅读 · 0 评论 -
MySQL中的慢查询日志(Slow Query Log)
MySQL中的慢查询日志(Slow Query Log)1. 以什么形式来记录?log_output系统变量来决定的,可选值 TABLE, FILE, 或者 NONE,默认值是FILE,可以同时选择TABLE和FILE,中间用逗号隔开。2. 如何开启?设置 slow_query_log 系统变量,设置为ON,OFF3. 具体写到哪里?如果是写到文件里,由slow原创 2017-09-18 23:20:52 · 2610 阅读 · 0 评论 -
MySQL基于GTIDs的主从复制
MySQL基于GTIDs的主从复制之前的文档中讲述了基于二进制日志文件位置的复制,这一节讲如何搭建基于GTID(Global Transaction Identifiers)的主从复制。如果要了解GTID的概念,请参考下一篇文章测试环境:Mysql 5.7.18 社区版,Ubuntu 16.04,两台机器,db2a作为Master, db2b作为slave前提条件:原创 2017-09-20 22:32:06 · 712 阅读 · 0 评论 -
MySQL 创建存储过程示例
1. 创建存储过程mysql> use sample2;Database changedmysql> select * from t1;+------+| id |+------+| 100 || 200 |+------+2 rows in set (0.03 sec)mysql> DELIMITER $$mysql> CREATE PROCEDURE proce...原创 2018-05-31 16:23:56 · 1438 阅读 · 1 评论 -
MySQL源码安装系列之-安装MySQL
环境:vmware workstation 10.0.1 build-1379776OS: ubuntu desktop 18.04mysql: 5.7.221. 下载并安装linux选择的是ubuntu桌面版,下载地址自行百度,下载文件名为 ubuntu-18.04-desktop-amd64.iso,之后在vmware里安装2. 安装必要的软件和包//vm-tools的目的是使ubuntu可以...原创 2018-07-02 23:08:16 · 895 阅读 · 0 评论 -
MySQL源码安装系列之-使用Eclipse来debug mysql源码
在看这篇文章之前,应该先参考下面的文章先使用源码方法安装好mysqlhttps://blog.csdn.net/qingsong3333/article/details/80891152安装好之后,就可以使用eclipse来调试MySQL的源代码了:1. 下载Eclipse for c/c++, 以及jreEclipse下载地址如下,下载之后文件名为 eclipse-cpp-oxygen-3a-l...原创 2018-07-02 23:19:54 · 3101 阅读 · 2 评论 -
每日MySQL之004:备份与恢复
MySQL备份与恢复备份与mysql一样,mysqldump也是一个数据库client工具,它可以用来备份数据库, mysqldump产生的是一系列的SQL语句,可以直接执行来创建数据库和表,除了备份数据库之外,也可以方便地将数据导入到另一个mysql server,常见语法如下:shell> mysqldump [options] db_name [tbl_name ...]原创 2017-08-01 22:12:16 · 529 阅读 · 0 评论 -
每日MySQL之025:InnoDB,直接拷贝文件来实现表的复制
对于InnoDB 来讲,可以使每个表使用单独的表空间,也就是每个表都有自己的文件,称为File-Per-Table。 可以利用这个特点,直接拷贝对应文件,把表复制到另外一个MySQL实例下, 又被称为 Transportable Tablespace。假设有两个MySQL实例,一个运行在db2a(源端)下,另一个运行在db2b(目标端)下,现在演示一下,如何通过这种方式将db2a下的表复制原创 2017-08-14 22:56:22 · 2565 阅读 · 0 评论 -
每日MySQL之024:FLUSH TABLES
FLUSH TABLES 作用是 flush 表,并根据参数加上相应的锁。默认是写日志的,如果不希望写日志,可以设置加上参数 NO_WRITE_TO_BINLOG。另外, FLUSH TABLES 命令执行前会隐式地发出commit命令,常见语法如下:• FLUSH TABLES关闭所有的表,包括正在使用的表,并且会flush query cache。如果有正处于活动状态的 LOCK原创 2017-08-14 22:37:17 · 6495 阅读 · 0 评论 -
每日MySQL之023:使用ANALYZE TABLE命令分析表的key distribution
ANALYZE命令主要对表做 key distribution 分析,语法如下:ANALYZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] ...ANALYZE TABLE 作用的对象是 InnoDB, NDB, 和 MyISAM 表,对视图不起作用。在分析期间,会对表加上read lock(InnoD原创 2017-08-14 22:31:59 · 10910 阅读 · 3 评论 -
每日MySQL之026:MySQL的子查询(subquery)
子查询就是SELECT语句里的子SELECT语句,一个子查询可以返回一个单一值(scalar)、一行、一列或者一个表1. scalar subquery返回一个值,最简单的子查询,示例1:mysql> CREATE TABLE t1 (s1 INT, s2 CHAR(5) NOT NULL);mysql> INSERT INTO t1 VALUES(100, 'abcde');原创 2017-08-18 00:20:14 · 1452 阅读 · 0 评论 -
每日MySQL之015:MySQL中的自动提交(autocommit)与savepoint
本文所述内容均在InnoDB存储引擎下。1. 自动提交的关闭与打开MySQL默认是打开了自动提交的。关闭自动提交有以下办法1. Session级别:使用 START TRANSACTION 或者 BEGIN 来开始一个事务,使用ROLLBACK/COMMIT来结束一个事务。2. Session级别:SET autocommit=0关闭当前session的自动提交。3. 全局原创 2017-08-09 23:57:31 · 5774 阅读 · 0 评论 -
每日MySQL之007:MySQL复制之Binary Log File Position Based Replication
MySQL中的复制有Binary Log File Position Based Replication和Replication with Global Transaction Identifiers,这篇只讲述前者这种模式下,master将更新操作写到binary log中,而slave读取并执行这些从主机发过来的binary log,从而更新本地数据库。每个slave都会从主机获取一份原创 2017-08-02 00:16:47 · 672 阅读 · 0 评论 -
每日MySQL之006:MySQL中的binary log
MySQL中的Binary log和DB2中事务日志的概念类似,MySQL中的这种类型的日志叫做Binary Log,binary log主要记录能使数据库中数据改变的事件,比如创建表操作,它也能记录能“潜在”改变数据的操作(比如,一条DELETE SQL,没有符合条件的记录),row-based logging除外。作用:Binary log主要有两个重要的作用:复制与数据恢原创 2017-08-01 22:42:51 · 708 阅读 · 0 评论 -
每日MySQL之005:SUSE linux下卸载MySQL
卸载这里的卸载,对应于之前的安装停止MySQL服务:db2a:~ # service mysql stop找到所有的MySQL包:db2a:~ # rpm -qa | grep -i mysqlmysql-community-server-5.7.19-1.sles11mysql-community-common-5.7.19-1.sles11libqt原创 2017-08-01 22:17:23 · 1302 阅读 · 0 评论 -
每日MySQL之003:数据库与表的创建、删除与查询
1 创建与使用数据库1.1 创建数据库mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sys原创 2017-08-01 22:01:38 · 457 阅读 · 0 评论 -
每日MySQL之002:MySQL server连接与查询
1 连接到 MySQL servermysql命令是一个client MySQL Command-Line Tool 工具,它可以用来连接MySQL server,连接成功之后,会提供一个交互shell, 最常见的语法如下:shell> mysql -h host -u user -p其中-h 表示hostname, -u表示用户名,-p表示要输入密码:db2a:~ # m原创 2017-08-01 21:50:40 · 442 阅读 · 0 评论 -
每日MySQL之013:TIMESTAMP和DATETIME列的自动初始化与自动更新
TIMESTAMP 和 DATETIME 列可以自动地被初始化和更新为当前的日期/时间。对于 TIMESTAMP 和 DATETIME 列,可以把当前时间戳设置为其默认值、自动更新值或者两者都设置:--对于auto-initialized 列,如果新插入的记录没有指定值,那么设置其值为当前时间戳。--对于auto-updated 列,如果这条记录的其他列的值发生变化,那么这一列就会原创 2017-08-07 22:48:07 · 4162 阅读 · 0 评论 -
每日MySQL之001:MySQL在SUSE Linux下的安装
SUSE版本为11.41. 下载与安装1.1 downloadhttps://dev.mysql.com/downloads/mysql/下载文件如下,这里下载的是社区版本,以下命令,如无特别说明,均为root用户在家目录下操作的:db2a:~ # ls mysql*mysql-5.7.19-1.sles11.x86_64.rpm-bundle.tar1原创 2017-08-01 00:21:38 · 3784 阅读 · 0 评论 -
第一次使用MySQL client连接到远程MySQL server时的常见报错及处理
第一次安装MySQL client,并尝试连接到远程的MySQL server时,可能遇到一些报错,这篇文章主要讲解了这些报错的解决,主要包括:ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.16.128' (111)和ERROR 1130 (HY000): Host 'db2b' is not allowed to connect to this MySQL server原创 2017-07-18 23:57:06 · 7991 阅读 · 0 评论 -
每日MySQL之016:MySQL Server客户端工具-mysqladmin
同mysqlslap和mysql命令一样,mysqladmin也是一个客户端工具,可以用来查看服务器的配置、当前状态、删除/创建数据库等操作。语法如下:shell> mysqladmin [options] command [command-arg] [command [command-arg]] ...其中经常用到的command包括:* create * dro原创 2017-08-10 22:41:29 · 399 阅读 · 0 评论 -
每日MySQL之017:MySQL中的prepared statements
MySQL支持服务端的prepared statements使用prepared statements的好处1. 降低了每次SQL执行时的解析开销。特别是应用程序处理大量的几乎相同的SQL语句时,比如,select和delete语句只有where条件不同, update的语句只有set不同, insert语句只有values不同。2. 降低SQL注入攻击的风险。如何使用原创 2017-08-10 22:54:59 · 1209 阅读 · 0 评论 -
每日MySQL之008:MySQL权限简介
MySQL权限简介MySQL 有自己账户管理方式,这一点和DB2不同,因为DB2没有自己的账户,都是依赖于操作系统账户。MySQL账户由两部分组成:user name 和 host name,语法为 'user_name'@'host_name'. 如果一个账户只有user name,则等同于'user_name'@'%',这里的%表示所有的host1. 查看某个用户权限:可以原创 2017-08-02 22:53:21 · 618 阅读 · 0 评论