zoukankan      html  css  js  c++  java
  • mysql

    MySql

    操作数据库

    SHOW VARIABLES LIKE 'datadir';      # 查看数据目录

    show create table students G # 查看sql语句

    SHOW ENGINES;
    SHOW VARIABLES LIKE 'default_storage_engine%';
    SET default_storage_engine=< 存储引擎名 >;

    CREATE DATABASE [IF NOT EXISTS] <数据库名>
    [[DEFAULT] CHARACTER SET <字符集名>]
    [[DEFAULT] COLLATE <校对规则名>];

    ALTER DATABASE [数据库名] {
    [ DEFAULT ] CHARACTER SET <字符集名> |
    [ DEFAULT ] COLLATE <校对规则名>}

    DROP DATABASE [ IF EXISTS ] <数据库名>;

    ALTER TABLE <表名> ENGINE=<存储引擎名>; # 设置表的引擎

    # 当发现数据无效时回滚
    SET sql_mode = 'STRICT_ALL_TABLES' ;
    SET sql_mode = 'STRICT_TRANS_TABLES';

    数据类型

    1. 整数

      • tinyint 1字节

      • SMALLINT 2字节

      • MEDIUMINT 3字节

      • INT 4字节

      • BIGINT 8字节

    2. 浮点数

      • FLOAT 4字节

      • DOUBLE 8字节

    3. 定点数

      • DECIMAL(M, D), DEC 取值范围与double相同,以字符串形式存放

    4. 日期 时间

      类型名称日期格式日期范围存储需求
      YEAR YYYY 1901 ~ 2155 1 个字节
      TIME HH:MM:SS -838:59:59 ~ 838:59:59 3 个字节
      DATE YYYY-MM-DD 1000-01-01 ~ 9999-12-3 3 个字节
      DATETIME YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 8 个字节
      TIMESTAMP YYYY-MM-DD HH:MM:SS 1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC 4 个字节
    5. 字符串

      CHAR(M)固定长度非二进制字符串M 字节,1<=M<=255
      VARCHAR(M) 变长非二进制字符串 L+1字节,在此,L< = M和 1<=M<=255
      TINYTEXT 非常小的非二进制字符串 L+1字节,在此,L<2^8
      TEXT 小的非二进制字符串 L+2字节,在此,L<2^16
      MEDIUMTEXT 中等大小的非二进制字符串 L+3字节,在此,L<2^24
      LONGTEXT 大的非二进制字符串 L+4字节,在此,L<2^32
      ENUM 枚举类型,只能有一个枚举字符串值 1或2个字节,取决于枚举值的数目 (最大值为65535)
      SET 一个设置,字符串对象可以有零个或 多个SET成员 1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员)
    6. 二进制

      类型名称说明存储需求
      BIT(M) 位字段类型 大约 (M+7)/8 字节
      BINARY(M) 固定长度二进制字符串 M 字节
      VARBINARY (M) 可变长度二进制字符串 M+1 字节
      TINYBLOB (M) 非常小的BLOB L+1 字节,在此,L<2^8
      BLOB (M) 小 BLOB L+2 字节,在此,L<2^16
      MEDIUMBLOB (M) 中等大小的BLOB L+3 字节,在此,L<2^24
      LONGBLOB (M) 非常大的BLOB L+4 字节,在此,L<2^32

    SQL

    # DDL 数据定义语言
    create table students (
    student_id int unsigned not null auto_increment,
    name varchar(30) default 'nobody',
      class_id int,
    sex char(1),
    birth date null,
    primary key(student_id [, name]), # 这种方式可以设置多字段主键
       constraint students foreign key (class_id) references class(id)
       # 外键
    ) engine=innodb
    default charset=gb2312
    auto_increment=100; # 初始值为100

    desc students;

    # DML 数据操作语言
    insert into students(student_id, name, sex, birth)
    values (41408101, 'mysql教程', '1', '2020-7-27');

    ALTER TABLE <表名>
    ADD COLUMN <列名> <类型> [FIRST][AFTER <已存在表名>]# 没有first则添加在末尾
    CHANGE COLUMN <旧列名> <新列名> <新列类型>
    ALTER COLUMN <列名> { SET DEFAULT <默认值> | DROP DEFAULT }
    MODIFY COLUMN <列名> <类型>
    DROP COLUMN <列名>
    DROP FOREIGN KEY fk_tab1_tab2 # 删除外关联的表前先删除外键
    RENAME TO <新表名>
    CHARACTER SET <字符集名>
    COLLATE <校对规则名>

    DROP TABLE IF EXISTS table1, table2, ...

    # DQL 数据查询语言

    # DCL 数据控制语言

    约束

    主键

    # 设置联合主键
    create table user(
    'id' int,
       'name' varchar(20),
       primary key(id, name)
    );

    # 添加主键约束
    alter table tb_user
    add primary key(id);

    # 删除主键约束
    alter table tb_user
    drop primary key;

    外键

    [CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…]
    REFERENCES <主表名> 主键列1 [,主键列2,…]

    create table tb_user(
    id int primary key,
      class_id int,
      class_name varchar(24),
       constraint fk_user_class
       foreign key(class_id, class_name)
       references tb_class(id, name)
    );

    # 添加外键
    alter table tb_user
    add constraint fk_user_class
    foreign key(class_id)
    references tb_class(id);

    # 删除外键
    alter table tb_user
    drop foreign key fk_user_class;

    唯一约束

    与主键不同:

    主键只能有一个,唯一约束可以有多个;

    主键不允许为空,唯一约束允许一个值为空。

    <字段> <数据类型> unique

    # 添加唯一约束
    alter table tb_table
    add constraint unique_name UNIQUE(name);

    # 删除唯一约束
    alter table tb_table
    drop index unique_name;

    检查约束

    create table tb_table(
    'salary'  float,
       check(salary>0 and salary<0)
    );

    # 添加检查约束
    alter table tb_table
    add constraint check_id check(id>0);

    # 删除检查约束
    alter table tb_table
    drop constraint check_id;

    默认值

    create table tb_table(
    name char default 'none'
    );
    # 增加
    alter table tb_table
    change column name name varchar(20) default 'nil';
    # 删除
    alter table tb_table
    change column name name varchar(20) default NULL;

    非空约束

    create table tb_table(
    name char not null
    );
    # 增加
    alter table tb_table
    change column name name char not null;
    # 删除
    alter table tb_table
    change column name name char null;

    常用运算符

    算数

    1. +

    2. -

    3. *

    4. /

    逻辑

    1. NOT !

    2. AND &&

    3. OR ||

    4. XOR

    比较运算符

    运算符作用
    = 等于
    <=> 安全的等于
    <> 或者 != 不等于
    <= 小于等于
    >= 大于等于
    > 大于
    IS NULL 或者 ISNULL 判断一个值是否为空
    IS NOT NULL 判断一个值是否不为空
    BETWEEN AND 判断一个值是否落在两个值之间

    位运算符

    运算符说明使用形式举例
    | 位或 a | b 5 | 8
    & 位与 a & b 5 & 8
    ^ 位异或 a ^ b 5 ^ 8
    ~ 位取反 ~a ~5
    << 位左移 a << b 5 << 2,表示整数 5 按位左移 2 位
    >> 位右移 a >> b 5 >> 2,表示整数 5 按位右移 2 位

    操作表中数据

    查询

    SELECT *|<字段名>
    FROM t_table1 as t1, t_table2 as t2
    WHERE <表达式>
    GROUP BY <字段>
    HAVING <expression>
    ORDER BY <字段> [ASC|DESC]
    LIMIT num offset num / LIMIT offset_num, limit_num

    # distinct 去重
    select distinct name from user;
    # 通配符,%匹配任意长度字符串,_ 匹配单一字符。
    select name from user where name (not) like 'T%' or 'a_'
    # 范围查询
    select name, age from users where age between 18 and 30;
    # 空值查询
    select name from users where class is null;
    # group by 单独使用
    select name, sex from users group by sex;
    # group by 与 group_concat()
    select sex, group_concat(name) from users group by sex;
    # group by 与 聚合函数
    select sex, count(sex) from users group by sex;
    # group by 与 with rollup(统计记录总量)
    select sex, group_concat(name) from users group by sex with rollup;
    # having 用于过滤分组
    select group_concat(name), sex, height from tb_student
    group by height
    having avg(height) > 170;

    # 交叉连接
    select * from tb_table1 cross join tb_table2;
    select * from tb_course as tb1, tb_students as tb2
    where tb1.id = tb2.class_id;

    # 内连接
    # 通过关键字连接两张表,没有ON连接条件,inner join 与 cross join 等价
    select s.name c.course_name
    from tb_students s inner join tb_course c
    on s.course_id = c.id

    # 左连接
    # 以左侧为基表,当右侧表无符合项时设置为null
    select s.name, c.course_name
    from tb_students s left join tb_course c
    on s.course_id=c.id
    # 右连接,与左连接相反

    # 子查询
    select *
    from tb_students
    where age>24 and exists(
    select course_name
    from tb_course
    where id=1)

    SELECT * FROM (SELECT * FROM result) AS Temp;

    正则

    选项说明例子匹配值示例
    ^ 匹配文本的开始字符 '^b' 匹配以字母 b 开头的字符串 book、big、banana、bike
    $ 匹配文本的结束字符 'st$' 匹配以 st 结尾的字符串 test、resist、persist
    . 匹配任何单个字符 'b.t' 匹配任何 b 和 t 之间有一个字符 bit、bat、but、bite
    * 匹配零个或多个在它前面的字符 'f*n' 匹配字符 n 前面有任意个字符 f fn、fan、faan、abcn
    + 匹配前面的字符 1 次或多次 'ba+' 匹配以 b 开头,后面至少紧跟一个 a ba、bay、bare、battle
    <字符串> 匹配包含指定字符的文本 'fa' 匹配包含‘fa’的文本 fan、afa、faad
    [字符集合] 匹配字符集合中的任何一个字符 '[xz]' 匹配 x 或者 z dizzy、zebra、x-ray、extra
    [^] 匹配不在括号中的任何字符 'abc' 匹配任何不包含 a、b 或 c 的字符串 desk、fox、f8ke
    字符串{n,} 匹配前面的字符串至少 n 次 'b{2}' 匹配 2 个或更多的 b bbb、bbbb、bbbbbbb
    字符串 {n,m} 匹配前面的字符串至少 n 次, 至多 m 次 'b{2,4}' 匹配最少 2 个,最多 4 个 b bbb、bbbb
    select *
    from tb_users
    where name regexp '^J';

    插入

    insert into tb_users(name, grade)
    values('name1', '1'), ('name2', '2');

    # 复制表
    insert into tb_students(name, sex, info)
    select name, sex, info
    from tb_users;

    修改

    update table_name
    set name='value', name2='value2'
    where id>0
    order by id
    limit 2,9

    删除

    delete from table_name
    where id>0
    order by id
    limit 3,9

    清空表

    # DDL 数据定义语句
    # 直接删除表,再建一张新表;delete是一条一条删除
    # delete可配合事务回滚,truncate删除后无法找回
    # delete返回删除数据行数,truncate返回0
    truncate tabel_name

    视图

    视图都是存储在 information_schema 数据库的 views 表下。SELECT * FROM information_schema.views;

    视图的使用方法与表类似。

    • 视图不是数据库中真实的表,而是一张虚拟表,其结构和数据是建立在对数据中真实表的查询基础上的。

    • 存储在数据库中的查询操作 SQL 语句定义了视图的内容,列数据和行数据来自于视图查询所引用的实际表,引用视图时动态生成这些数据。

    • 视图没有实际的物理记录,不是以数据集的形式存储在数据库中的,它所对应的数据实际上是存储在视图所引用的真实表中的。

    • 视图是数据的窗口,而表是内容。表是实际数据的存放单位,而视图只是以不同的显示方式展示数据,其数据来源还是实际表。

    • 视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些 SQL 语句的集合。从安全的角度来看,视图的数据安全性更高,使用视图的用户不接触数据表,不知道表结构。

    • 视图的建立和删除只影响视图本身,不影响对应的基本表。

    • ORDER BY 子句可以用在视图中,但若该视图检索数据的 SELECT 语句中也含有 ORDER BY 子句,则该视图中的 ORDER BY 子句将被覆盖。

    创建视图时,select语句的要求:

    • 用户除了拥有 CREATE VIEW 权限外,还具有操作中涉及的基础表和其他视图的相关权限。

    • SELECT 语句不能引用系统或用户变量。

    • SELECT 语句不能包含 FROM 子句中的子查询。

    • SELECT 语句不能引用预处理语句参数

    当视图的语句含有特定结构时,不可更新:

    • 聚合函数 SUM()、MIN()、MAX()、COUNT() 等。

    • DISTINCT 关键字。

    • GROUP BY 子句。

    • HAVING 子句。

    • UNION 或 UNION ALL 运算符。

    • 位于选择列表中的子查询。

    • FROM 子句中的不可更新视图或包含多个表。

    • WHERE 子句中的子查询,引用 FROM 子句中的表。

    • ALGORITHM 选项为 TEMPTABLE(使用临时表总会使视图成为不可更新的)的时候。

    # 创建视图
    create view view_name as <select_语句>

    CREATE VIEW view_students_info
    AS SELECT * FROM tb_students_info;

    CREATE VIEW v_students_info (s_id,s_name,d_id,s_age,s_sex,s_height,s_date)
    AS SELECT id,name,dept_id,age,sex,height,login_date
      FROM tb_students_info;

    # 查询视图
    desc v_students_info;

    # 查看视图详细信息
    show create view view_name G;

    # 修改视图
    alter view view_name as <select_语句>

    ALTER VIEW view_students_info
    AS SELECT id,name,age FROM tb_students_info;

    # 删除视图
    drop view view_name [, view_name2 ...]

    DROP VIEW IF EXISTS v_students_info;

    索引

    1. 普通索引 使用 index, key CREATE INDEX index_id ON tb_student(id);

    2. 唯一索引 使用 unique

    3. 主键索引 使用 primary key

    4. 空间索引 使用 spatial CREATE SPATIAL INDEX index_line ON tb_student(line);

    索引设计原则

    1. 选择唯一性索引

    2. 为经常需要排序、分组和联合操作的字段建立索引

    3. 为常作为查询条件的字段建立索引

    4. 限制索引的数目

    5. 尽量使用数据量少的索引

    6. 数据量小的表最好不要使用索引

    7. 尽量使用前缀来索引

    8. 删除不再使用或者很少使用的索引

    # 创建索引
    CREATE <索引名> ON <表名> (<列名> [<长度>] [ ASC | DESC])

    # 在使用 create table 创建表时添加 primary key,
    # key, index, unique, foreign key

    # 在使用 alter table 修改表时,使用 add index/primary key/unique 等

    # 查看索引
    SHOW INDEX FROM <表名> [ FROM <数据库名>]

    SHOW INDEX FROM tb_stu_info2G

    # 删除索引
    drop index index_name on table_name_
    alter table table_name_ drop ...

    存储过程

    有时需要多条sql语句处理多个表才能完成操作。存储过程是一组为了完成特定功能的sql语句集合。使用存储过程的目的是将工作预先用 SQL 语句写好并用指定名称存储,经编译和优化后存储在数据库中。当使用时,调用“CALL存储过程名字”即可自动完成。

    存储过程都存储在information_schema的Routines表下 SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME=存储过程名;

    # 创建存储过程
    CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体>
    [过程参数[,…] ] 格式
    [ IN | OUT | INOUT ] <参数名> <类型>
    BEGIN
    ...
    END <结束符号,由 delimiter 定义>

    DELIMITER // # 定义结束符号,防止与单个语句的;弄混
    CREATE PROCEDURE ShowStuScore()
    BEGIN    # 开始过程
    SELECT * FROM tb_students_score;
    END // # 过程结束

    DELIMITER //
    CREATE PROCEDURE GetScoreByStu
    (IN name VARCHAR(30))
    BEGIN
    SELECT student_score FROM tb_students_score
    WHERE student_name=name;
    END//

    # 查看存储过程
    SHOW PROCEDURE STATUS LIKE 存储过程名; # 状态
    SHOW CREATE PROCEDURE 存储过程名; # 定义

    SHOW PROCEDURE STATUS LIKE 'showstuscore' G

    # 修改存储过程
    ALTER PROCEDURE 存储过程名 [ 特征 ... ]

    ALTER PROCEDURE showstuscore MODIFIES SQL DATA SQL SECURITY INVOKER;

    # 删除存储过程
    DROP PROCEDURE [ IF EXISTS ] <过程名>

    DROP PROCEDURE ShowStuScore;

    特征指定了存储过程的特性,可能的取值有:

    • CONTAINS SQL 表示子程序包含 SQL 语句,但不包含读或写数据的语句。

    • NO SQL 表示子程序中不包含 SQL 语句。

    • READS SQL DATA 表示子程序中包含读数据的语句。

    • MODIFIES SQL DATA 表示子程序中包含写数据的语句。

    • SQL SECURITY { DEFINER |INVOKER } 指明谁有权限来执行。

    • DEFINER 表示只有定义者自己才能够执行。

    • INVOKER 表示调用者可以执行。

    • COMMENT 'string' 表示注释信息。

    触发器

    通过对数据表的相关操作来触发、激活从而实现执行。比如当对 student 表进行操作(mysql中只有 INSERT,DELETE 或 UPDATE)时就会激活它执行。

    SELECT * FROM information_schema.triggers WHERE trigger_name= '触发器名';

    # 查看触发器
    SHOW TRIGGERS

    # 创建触发器
    CREATE <触发器名> < BEFORE | AFTER >
    <INSERT | UPDATE | DELETE >
    ON <表名> FOR EACH Row<触发器主体>

    CREATE TRIGGER SumOfSalary
    BEFORE INSERT ON tb_emp8
    FOR EACH ROW
    SET @sum=@sum+NEW.salary;

    CREATE TRIGGER SumOfSalary
    BEFORE INSERT ON tb_emp8
    FOR EACH ROW
    SET @sum=@sum+NEW.salary;

    CREATE TRIGGER double_salary
    AFTER INSERT ON tb_emp6
    FOR EACH ROW
    INSERT INTO tb_emp7
    VALUES (NEW.id,NEW.name,deptId,2*NEW.salary);

    # 删除触发器
    DROP TRIGGER [ IF EXISTS ] [数据库名] <触发器名>

    事件

    # 查看事件是否开启
    SHOW VARIABLES LIKE 'event_scheduler';
    SELECT @@event_scheduler;
    SHOW PROCESSLIST;
    # 开启事件
    SET GLOBAL event_scheduler = ON ; -- 也可直接修改配置文件 event_scheduler = ON

    # 创建事件
    CREATE EVENT [IF NOT EXISTS] event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'comment']
    DO event_body;

    CREATE EVENT IF NOT EXISTS e_test
    ON SCHEDULE EVERY 5 SECOND
    ON COMPLETION PRESERVE
    DO INSERT INTO tb_eventtest(user,createtime)VALUES('MySQL',NOW());

    # 查看事件
    SELECT * FROM information_schema.events limit 1G

    # 修改事件
    ALTER EVENT event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'comment']
    DO event_body;

    ALTER EVENT e_test ON SCHEDULE EVERY 30 SECOND
    ON COMPLETION PRESERVE
    DO INSERT INTO tb_eventtest(user,createtime) VALUES('MySQL',NOW());

    # 删除事件
    DROP EVENT [IF EXISTS] event_name;

    事务

    默认开启事务自动提交,除了显式的(begin, start transaction),每一条sql语句都被当做事务执行。

    > BEGIN
    > update ...
    > insert ...
    > COMMIT

    > BEGIN
    > update ...
    > update ...(error)
    > ROLLBACK

    SHOW VARIABLES LIKE 'autocommit'; -- 查看是否默认开启事务自动提交
    SET autocommit = 0|1|ON|OFF;    -- 关闭自动提交
    # 关闭自动提交后需要执行 commit 才能将数据写入数据库

    # 查看事务隔离级别
    show variables like '%tx_isolation%';
    select @@tx_isolation;

    # 修改事务隔离级别
    SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

    MySQL 包括的事务隔离级别如下:

    • 读未提交(READ UNCOMITTED)

    • 读提交(READ COMMITTED)

    • 可重复读(REPEATABLE READ)

    • 串行化(SERIALIZABLE)

    隔离级别脏读不可重复读幻读
    READ UNCOMITTED
    READ COMMITTED ×
    REPEATABLE READ × ×
    SERIALIZABLE × × ×

    用户管理

    # 创建用户
    CREATE USER <用户>
    [ IDENTIFIED BY [ PASSWORD ] 'password' ]
    [ ,用户 [ IDENTIFIED BY [ PASSWORD ] 'password' ]]

    CREATE USER 'test1'@"localhost" IDENTIFIED BY 'test1';

    SELECT password('test1'); -- 获得密码对应哈希值
    CREATE USER 'test1'@'localhost'IDENTIFIED BY PASSWORD '*06C0BF5B64ECE2F648B5F048A71903906BA08E5C';

    -- 直接插入mysql数据库的user表中
    INSERT INTO mysql.user(Host, User, authentication_string, ssl_cipher, x509_issuer, x509_subject)
    VALUES ('hostname', 'username', PASSWORD('password'), '', '', '');

    # 设置权限,无用户则创建
    GRANT priv_type
    ON database.table
    TO user [IDENTIFIED BY [PASSWORD] 'password']

    GRANT SELECT
    ON*.*
    TO 'test3'@localhost IDENTIFIED BY 'test3';

    # 重命名账号
    RENAME USER <旧用户> TO <新用户>

    # 删除用户
    drop user 用户1, 用户2 ...
    DELETE FROM mysql.user WHERE Host='hostname' AND User='username';

    # 查看权限
    SELECT * FROM mysql.user;
    SHOW GRANTS FOR 'username'@'hostname';

    # 授权
    GRANT priv_type [(column_list)]
    ON database.table
    TO user [IDENTIFIED BY [PASSWORD] 'password']
    [, user[IDENTIFIED BY [PASSWORD] 'password']] ...
    [WITH with_option [with_option]...]

    # 取消授权
    REVOKE priv_type [(column_list)]...
    ON database.table -- 不指定则是所有
    FROM user [, user]...



    # 使命令生效
    FLUSH PRIVILEGES;

    授权中 with_optin 参数

    • GRANT OPTION:被授权的用户可以将这些权限赋予给别的用户;

    • MAX_QUERIES_PER_HOUR count:设置每个小时可以允许执行 count 次查询;

    • MAX_UPDATES_PER_HOUR count:设置每个小时可以允许执行 count 次更新;

    • MAX_CONNECTIONS_PER_HOUR count:设置每小时可以建立 count 个连接;

    • MAX_USER_CONNECTIONS count:设置单个用户可以同时具有的 count 个连接。

    修改密码

    # root 修改普通用户密码
    alter user 'root'@'localhost' identified by '123';

    UPDATE MySQL.user
    SET authentication_string = PASSWORD("newpwd")
    WHERE User = "username" AND Host = "hostname";

    GRANT USAGE
    ON *.*
    TO 'user'@’hostname’ IDENTIFIED BY 'newpwd';

    # 修改 root 密码
    mysqladmin -u username -h hostname -p password "newpwd"

    备份与恢复

    • 热备(Hot Backup)

      • 逻辑备份

      • 裸文件备份

    • 冷备(Cold Backup)

      • 关机后,直接将数据目录复制

    • 温备(Warm Backup)

    mysqldump -u username -p dbname [tbname ...]> filename.sql  -- 备份
    mysql -u username -P [dbname] < filename.sql   -- 恢复

    SELECT * FROM test.person INTO OUTFILE "/opt/person.txt"
    # 如果导出出错,show variables like '%secure%';,查看 secure_file_priv
    LOAD DATA INFILE "/opt/person.txt"

    日志

    1. 错误日志

    [mysqld]
    log-error=dir/{filename}
    SHOW VARIABLES LIKE 'log_error'; # 查看错误日志位置

    mysqladmin -uroot -p flush-logs  # 删除错误日志
    1. 二进制日志

    主要用于记录数据库的变化情况,即 SQL 语句的 DDL 和 DML 语句,不包含数据记录查询操作。

    如果 MySQL 数据库意外停止,可以通过二进制日志文件来查看用户执行了哪些操作,对数据库服务器文件做了哪些修改,然后根据二进制日志文件中的记录来恢复数据库服务器。

    # 查看是否开启
    SHOW VARIABLES LIKE 'log_bin';

    # 配置文件中设置 log-bin=C:logmylog

    # 查看
    SHOW binary logs;
    SHOW master status; -- 查看当前正在写入的二进制日志文件

    mysqlbinlog filename.number # 需要在二进制日志所在的目录下运行该命令

    # 删除
    RESET MASTER;
    PURGE MASTER LOGS TO 'filename.number';    -- 删除指定编号之前的日志
    PURGE MASTER LOGS TO 'yyyy-mm-dd hh:MM:ss';

    # 打开或关闭二进制日志
    SET SQL_LOG_BIN=0/1;

    # 通过二进制日志还原数据库
    mysqlbinlog filename.number | mysql -u root -p

    1. 查询日志

    记录用户的所有操作,包括启动和关闭 MySQL 服务、更新语句和查询语句等。

    # 查看是否开启查询日志
    SHOW VARIABLES LIKE '%general%';

    # 配置文件
    [mysqld]
    log=dir/filename

    # 删除日志
    mysqladmin -uroot -p flush-logs

    1. 慢查询日志

    慢查询日志用来记录在 MySQL 中执行时间超过指定时间的查询语句

    # 查看
    SHOW VARIABLES LIKE 'slow_query%';

    # 设置
    [mysqld]
    log-slow-queries=dirfilename
    long_query_time=10

    SET GLOBAL slow_query_log=ON/OFF;
    SET GLOBAL long_query_time=n;

    日志输出方式

    SHOW VARIABLES LIKE '%log_out%';

    SET GLOBAL log_output='TABLE';

  • 相关阅读:
    handler之责任链模式
    简单的PL/SQl链接远程ORACLE数据库方法
    An internal error occurred during: "Add Deployment". Container with path org.eclipse.jdt.launching.
    myeclipse非正常关闭处理办法
    jQuery Plugin Poshy Tip 使用 统一提示信息
    myeclipse部署maven时,src/main/resources里面配置文件加载不到webapp下classes路径下的问题
    CSS实现背景透明,文字不透明,兼容所有浏览器
    @SuppressWarnings注解
    @GeneratorValue与@GenericGenerator注解使用心得
    jap的教程
  • 原文地址:https://www.cnblogs.com/zhangzixian/p/13403717.html
Copyright © 2011-2022 走看看