第六周作业

@第六周作业

  1. 完成将server和client端的mysql配置默认字符集为utf8mb4;

    答:以rocky8 为例

    mysql -e 'use mysql; show character set;' --查看可用字符集
    mysql -e "use mysql; show variables like '%char%';" --查看默认字符集
    +--------------------------+----------------------------+
    | Variable_name | Value |
    +--------------------------+----------------------------+
    | character_set_client | utf8mb4 |
    | character_set_connection | utf8mb4 |
    | character_set_database | utf8mb4 |
    | character_set_filesystem | binary |
    | character_set_results | utf8mb4 |
    | character_set_server | utf8mb4 |
    | character_set_system | utf8mb3 |
    | character_sets_dir | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+

    修改默认字符集:

    vim /etc/my.cnf --yum安装默认路径
    vim /mysql/3306/etc/my.cnf --多实例安装路径
    注意:1. "必须在同一个窗口中更改-查看"才有实时更新效果!或 退出,重登入。
    2. 在rocky8 中默认就是utf8mb4,加了下面的设置反而有干扰,后面做实验报错!

    [mysqld]
    character-set-server=utf8mb4 --修改服务器的默认字符集

    [mysql]

    default-character-set=utf8mb4 --修改只针对mysql客户端

    [client]
    default-character-set=utf8mb4 --修改所有mysql客户端

    systemctl restart mysqld
    mysql> show variables like '%char%'; --再次查看

    4. 还原默认字符集

    vim /etc/my.cnf

    注释 或删除上面定义的规则、还原默认设置

    systemctl restart mysqld

  2. 掌握如何获取SQL命令的帮助,基于帮助完成添加testdb库,字符集utf8, 排序集合utf8_bin

    答:以rocky8 为例
    官网帮助文档:https://dev.mysql.com/doc/refman/8.0/en/create-database.html

    注意:1. 先查看命令的一些使用帮助:("其他命令举一反三!")
    root@rocky8 ~]#mysql

    help --查看客户端操作帮助

    SQL语句官方帮助:https://dev.mysql.com/doc/refman/8.0/en/sql-statements.html

    以"create"创建命令为演示:

    help create; --#查看使用帮助
    CREATE DATABASE
    help crate database; --#继续查看创建库帮助
    CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name --{DATABASE | SCHEMA}两者都可用!

     #帮助实操演示:
     mysql  -e "use  mysql;help;"               --查看客户端操作帮助   
     mysql  -e "use  mysql;help 'contents';"    --查看帮助文档的目录列表
     Data Types
     mysql  -e "use  mysql;help 'Data Types';"  --抽卡支持的所有数据类型
     mysql  -e "use  mysql;help 'insert';"      --插入数据的命令用法
     mysql  -e "use  mysql;help 'create';"      --创建的命令用法
     mysql  -e "use  mysql;help 'create table';"      --具体创建表的用法
     mysql  -e "use  mysql;help 'update';"            --更新数据用法
     mysql  -e "use  mysql;help 'delete';"            --删除表中数据用法
     mysql  -e "use  mysql;help 'drop';"              --删除表库用法
    
     #添加库: 
     mysql  -e "create  database  testdb;"
    

3.总结mysql常见的数据类型。

答:
参考网站:http://c.biancheng.net/view/2421.html

#常用数据类型:char ,varchar ,int ,bigint 
  1. 创建一个主机表host,放在testdb中,要求字段 1) 主键自增id 无符号, tinyint. 2) hostname可变字符长度256
    ,可为空。。3)ip 可变字符长度256,可为空。4)账号,可变字符长度256,可为空。5)密码,可变字符长度256
    ,可为空。6)创建时间,时间类型,非空。7)更新时间,时间类型,默认当前时间。8)区域,只能在华南,华北,华东
    ,三个区域之一。9)端口,无符号整数,可为空。10)外网地址,可变字符长度256,可为空。11)内网地址,可变字符长度256,可为空。

    答:

    创建库:

    mysql -e "create database testdb;"

    创建表:

mysql
use testdb;
create table host
(
id tinyint primary key auto_increment,
hostname varchar(256) null,
ip varchar(15) null,
Account varchar(256) null,
password varchar(256) null,
cre_time datetime not null,
up_time timestamp NULL default CURRENT_TIMESTAMP,
region varchar(8) check (region in ('华南','华北','华东')),
dport SMALLINT null,
internet_add varchar(256) null,
ethernet varchar(256) null
);

  1. 给testdb.host表中添加多条数据。

    答:
    mysql
    use testdb;
    insert into host (hostname,ip,Account,password,cre_time,up_time,region,dport,internet_add,ethernet)
    values('centos7','10.0.0.7','test01','123456','2023-06-23 05:05:05',default,'华东','80',null,null),('rocky8','10.0.0.8','test02','123456','2023-06-23 05:05:05',default,'华东','80',null,null);

  2. 总结mysql日志类型,并说明如何启动日志。。
    参考文档:https://www.cnblogs.com/hahaha111122222/p/15841889.html

    答:

    日志类型:

    事务日志,错误日志,通用日志,慢查询日志,二进制日志,中继日志,查询日志


    错误日志

     默认情况下,错误日志是开启的,且无法被禁止("重要的日志,如 服务起不来,看这里。")
     #"log_error"-变量查看默认错误文件存储路径:
     mysql> show global variables  like 'log_error';
     +---------------+---------------------------+
     | Variable_name | Value                     |
     +---------------+---------------------------+
     | log_error     | /var/log/mysql/mysqld.log |
     +---------------+---------------------------+
    
     #测试错误日志:
     --窗口2
     root@rocky8 ~]#systemctl stop  mysqld            --关闭服务
     root@rocky8 ~]#cat /data/log_error/mysqld.log    --日志中记录的信息(关注==>"Shutting down mysqld")
     2023-03-31T14:23:58.196322Z 0 [System] [MY-013172] [Server] Received SHUTDOWN from user <via user signal>. Shutting down mysqld (Version: 8.0.30).
    

    事务日志

     #"autocommit"-变量决定是否自动提交("即隐式提交")
     --mariadb 和mysql数据库:
     MariaDB [hellodb]> select @@autocommit;   --查看变量
     +--------------+
     | @@autocommit |
     +--------------+
     |            1 |                          --默认开启
    
         更改变量不自动提交数据:
         MariaDB [hellodb]> set autocommit=0;      --更改后则显式提交
    
     #添加事务:
     MariaDB [hellodb]> begin;      --显式添加事务
     MariaDB [hellodb]> insert into teachers(name,age,gender) values('x',30,'M');  --添加脏数据
    
     --窗口1
     MariaDB [hellodb]> select * from teachers;  --能看到添加的数据("但还没真正提交保存!")
    
     --窗口2
     MariaDB [hellodb]> select * from teachers;  --不能看到新插入的数据
    
     事务回滚:
     --窗口1
     MariaDB [hellodb]> rollback;   --事务回滚
     MariaDB [hellodb]> select * from teachers;   --查看数据被撤回
     MariaDB [hellodb]> insert into teachers(name,age,gender) values('x',30,'M');  --再次添加数据
     
     事务提交:
     MariaDB [hellodb]> commit;     --事务提交
    

    通用日志

     描述:通用日志:记录对数据库的通用操作,包括:错误的SQL语句
     ,通用日志可以保存在:file(默认值)或 table(mysql.general_log表)
    
     注意:1. 支持动作设置变量 和 配置中永久修改。
       	  2. 通用日志默认没有开启,需手动开启!,开启后记录执行过的命令。 
    
     #"general_log"-变量("控制通用日志开启或关闭"):
     mysql> select @@general_log;
     +---------------+
     | @@general_log |
     +---------------+
     |             0 |    --默认关闭
     +---------------+
    
     #临时开启通用日志:
     mysql> set global general_log=on;     --开启
     mysql> flush privileges;
     mysql> select @@general_log;          --确认开启
    
     #"general_log_file"-变量记录默认存放路径:
     mysql> select @@general_log_file;
     +---------------------------+
     | @@general_log_file        |
     +---------------------------+
     | /var/lib/mysql/rocky8.log |
     +---------------------------+
    
     #"log_output"-变量指定记录到数据库的表中:
     mysql> select @@log_output;
     +--------------+
     | @@log_output |
     +--------------+
     | FILE         |
     +--------------+
    
     #"general_log"表 由"log_output"变量指定的表
     mysql> use mysql
     mysql> select * from general_log;     --默认空
    
     #永久开启通用日志:
     root@rocky8 ~]#vim  /etc/my.cnf
     [mysqld]
     general_log=on
     log_output=table
    
     systemctl  restart  mysqld
    
     #查看表
     mysql> select  * from  general_log\G;
    

    慢查询日志

     描述:记录执行查询时长超出指定时长的操作(默认10秒)
     注意:1. 生产中阀值 可适当调低1-3秒
       	  2. 如果开启"通用日志"会有干扰,导致记录不到!
    
     #"slow_query_log"-变量("控制慢查询日志开启或 关闭")
     mysql> select @@slow_query_log;
     +------------------+
     | @@slow_query_log |
     +------------------+
     |                0 |  --默认关闭
     +------------------+
    
     #永久开启慢查询:
     vim  /etc/my.cnf
     --
     [mysqld]
     slow_query_log=on
     long_query_time=3
     --
     sytemctl  restart  mysqld
    
     #"slow_query_log_file"-变量查看默认存放路径
     mysql> select @@slow_query_log_file;
     +--------------------------------+
     | @@slow_query_log_file          |
     +--------------------------------+
     | /var/lib/mysql/rocky8-slow.log |
     +--------------------------------+
    
     #"log_queries_not_using_indexes"-变量("开启后,无论10秒都将记录下来")
     注意:1. 不支持 sleep等待命令,
    
     vim /etc/my.cnf
     --
     [mysqld]
     log_queries_not_using_indexes=on
     --
     systemctl restart mysqld
    
     #"mysqldumpslow"-命令慢查询分析工具:
     root@rocky8 ~]#mysqldumpslow --help  --帮助
    

    二进制日志("即归档日志"备份用)

     描述:在生成在线日志("即默认的两个事务日志文件")时,还会同时备份一下操作命令至 ("归档日志中保存!")
     注意:1. bin开头的都是二进制日志文件
           2. log_bin 变量(开启日志)和log_bin变量(自定义路径)完全是两回事!
           3. 每次重启服务,都会生成一个"新的二进制日志文件"。
    

    二进制日志记录三种格式:
    基于"语句"记录:statement,记录语句,默认模式( MariaDB 10.2.3 版本以下 ),日志量较少
    基于"行"记录:row,记录数据,日志量较大,更加安全,建议使用的格式,MySQL8.0默认格式
    混合模式:mixed, 让系统自行判定该基于哪种方式进行,默认模式( MariaDB 10.2.4及版本以上 )
    示列说明: 如 执行 update students set classid=20; --没有条件全改
    基于"语句"记录: 则 只记录执行语句一条命令。
    基于"行"记录: 则 会记录每条学生修改的命令("这里全部")
    混合模式: 则

    二进制日志文件的构成:

    1. 日志文件:mysql|mariadb-bin.<文件名后缀>,二进制格式,如: on.000001,mariadb-bin.000002
    2. 索引文件:mysql|mariadb-bin.index,文本格式,记录当前已有的二进制日志文件列表

     #"binlog_format"-变量("控制二进制日志格式"):
         MariaDB [hellodb]> show variables like 'binlog_format';  --查看默认格式
         +---------------+-------+
         | Variable_name | Value |
         +---------------+-------+
         | binlog_format | MIXED |    --默认"混合"
    
         mysql> show variables like 'binlog_format';   --查看默认格式
         +---------------+-------+
         | Variable_name | Value |
         +---------------+-------+
         | binlog_format | ROW   |   --默认"行"
         +---------------+-------+
    
         mysql> select now();        --查看当前时间
         +---------------------+
         | now()               |
         +---------------------+
         | 2023-04-01 01:00:47 |
         +---------------------+
    
     #决定二进制日志是否开启的两个关键变量:
           描述:什么时候开启(正常生产操作),什么时候关闭(做数据还原,大量测试数据写入,) 
     sql_log_bin=ON|OFF:是否记录二进制日志,默认ON,支持动态修改,系统变量,而非服务器选项
     log_bin=/PATH/BIN_LOG_FILE: 指定文件位置;默认OFF,表示不启用二进制日志功能,上述两项都开启才可以
     log_bin=on|off;    先指定路径,才能开启!
    
     binlog_format=STATEMENT|ROW|MIXED:#二进制日志记录的格式,mariadb5.5默认STATEMENT
     max_binlog_size=1073741824:       #单个二进制日志文件的最大体积,到达最大值会自动滚动,默认为1G
     
     #上面命令说明:文件达到上限时的大小未必为指定的精确值
     binlog_cache_size=4m                #此变量确定在每次事务中保存二进制日志更改记录的缓存的大小(每次连接)
     max_binlog_cache_size=512m          #限制用于缓存多事务查询的字节大小。
     sync_binlog=1|0:                   #设定是否启动二进制日志即时同步磁盘功能,默认0,由操作系统负责同步日志到磁盘
     expire_logs_days=N:                #二进制日志可以自动删除的天数。 默认为0,即不自动删除
    

     #"sql_log_bin" 和"log_bin"两个变量都要开启("控制二进制日志开启 或关闭"):
     mysql> select @@sql_log_bin;    --查看
     +---------------+
     | @@sql_log_bin |
     +---------------+
     |             1 |   --默认开启
     +---------------+
     1 row in set (0.00 sec)
    
     mysql> select @@log_bin;
     +-----------+
     | @@log_bin |
     +-----------+
     |         1 |   默认开
     +-----------+
    
     root@rocky8 ~]#ll /var/lib/mysql     --查看二进制日志路径文件
     total 576148
     -rw-r----- 1 mysql mysql       56 Mar 21 23:10  auto.cnf
     -rw-r----- 1 mysql mysql      157 Mar 22 10:58  binlog.000001    --bin开头的都是二进制日志文件
     -rw-r----- 1 mysql mysql      180 Mar 22 20:38  binlog.000002
    
     #"log_bin"-变量自定义存储路径:  
     mkdir  -p /data/binlog ; chown -R  mysql. /data/binlog    --授予权限
         编辑配置文件:
         vim  /etc/my.cnf
         --
         [mysqld]
         log_bin=/data/binlog/mysql-bin       --"mysql-bin"表示生成文件的"前缀名"
         --
         systemctl  restart mysqld            --每次重启服务都会生成一个"新的日志文件"
         root@rocky8 ~]#ll /data/binlog/       --查看路径文件
         total 8
         -rw-r----- 1 mysql mysql 157 Apr  1 01:14 mysql-bin.000001
         -rw-r----- 1 mysql mysql  30 Apr  1 01:14 mysql-bin.index
    
         root@rocky8 ~]#cat /data/binlog/mysql-bin.index   --该文件记录了"二进制日志文件的列表!"
         /data/binlog/mysql-bin.000001
    
     #"%log_bin%"-变量自定义存储相关变量:
     mysql> show variables like '%log_bin%';      --查询相关变量
     +---------------------------------+------------------------------+
     | Variable_name                   | Value                        |
     +---------------------------------+------------------------------+
     | log_bin                         | ON                           |   --开启日志的变量
     | log_bin_basename                | /data/binlog/mysql-bin       |   --自定义存储路径的前缀文件
     | log_bin_index                   | /data/binlog/mysql-bin.index |   --自定义存储路径的索引文件
    
    #"%binlog%"-查询所有二进制日志相关变量:
    mysql> show variables like '%binlog%';
    
    #"max_binlog_size"-变量("控制二进制日志文件存储大小")
    mysql> show variables  like 'max_binlog_size';  --查询默认可用大小
     +-----------------+------------+
     | Variable_name   | Value      |
     +-----------------+------------+
     | max_binlog_size | 1073741824 |  --默认1个G
     +-----------------+------------+
    
     #"show binlog events in ..."查看二进制日志记录:
         格式:SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
    
         查看自定义路径文件:
         root@rocky8 ~]#ll /data/binlog/
         total 12
         -rw-r----- 1 mysql mysql 157 Apr  1 10:14 mysql-bin.000001
         -rw-r----- 1 mysql mysql 157 Apr  1 10:14 mysql-bin.000002
         -rw-r----- 1 mysql mysql  60 Apr  1 10:14 mysql-bin.index
    
         查看二进制日志文件:
         mysql> show binlog events in 'mysql-bin.000001';     --直接找到二进制日志文件查看
         +------------------+-----+----------------+-----------+-------------+-----------------------------------+
         | Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                              |
         +------------------+-----+----------------+-----------+-------------+-----------------------------------+
         | mysql-bin.000001 |   4 | Format_desc    |         1 |         126 | Server ver: 8.0.30, Binlog ver: 4 |
         | mysql-bin.000001 | 126 | Previous_gtids |         1 |         157 |                                   |
         +------------------+-----+----------------+-----------+-------------+-----------------------------------+
    
         更新一条信息查看:
         mysql> select * from teachers;
         mysql> update  teachers  set age=35 where tid=1;
         mysql> flush privileges;
         mysql> show binlog events in 'mysql-bin.000002';  --查看
    

    +------------------+-----+----------------+-----------+-------------+--------------------------------------+
    | Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
    +------------------+-----+----------------+-----------+-------------+--------------------------------------+
    | mysql-bin.000002 | 323 | Table_map | 1 | 390 | table_id: 100 (hellodb.teachers) --更新不太明晰
    | mysql-bin.000002 | 390 | Update_rows | 1 | 460 | table_id: 100 flags: STMT_END_F |
    | mysql-bin.000002 | 460 | Xid | 1 | 491 | COMMIT /* xid=27 */ |
    | mysql-bin.000002 | 491 | Anonymous_Gtid | 1 | 568 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
    | mysql-bin.000002 | 568 | Query | 1 | 665 | use hellodb; flush privileges | --生效命令记录

         #"show master logs" 和 "show binary logs"查看日志使用率:
             格式:SHOW {BINARY | MASTER} LOGS
    
         mysql> show master logs;    --查看二进制日志文件使用大小
         +------------------+-----------+-----------+
         | Log_name         | File_size | Encrypted |
         +------------------+-----------+-----------+
         | mysql-bin.000001 |       157 | No        |
         | mysql-bin.000002 |       688 | No        |
         | mysql-bin.000003 |       157 | No        |
         +------------------+-----------+-----------+
    
         mysql> show binary logs;     --查看二进制日志文件使用大小
         +------------------+-----------+-----------+
         | Log_name         | File_size | Encrypted |
         +------------------+-----------+-----------+
         | mysql-bin.000001 |       157 | No        |
         | mysql-bin.000002 |       688 | No        |
         | mysql-bin.000003 |       157 | No        |
         +------------------+-----------+-----------+
    
     #"show master status"查看日志记录过程ID:                    
     mysql> show master status;
     +------------------+----------+--------------+------------------+-------------------+
     | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
     +------------------+----------+--------------+------------------+-------------------+
     | mysql-bin.000003 |      157 |              |                  |                   |
     +------------------+----------+--------------+------------------+-------------------+
         更新一个条数据看看:
         mysql> update teachers  set age=48 where tid=1;
         mysql> show master status;
         +------------------+----------+--------------+------------------+-------------------+
         | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
         +------------------+----------+--------------+------------------+-------------------+
         | mysql-bin.000003 |      491 |              |                  |                   |
         +------------------+----------+--------------+------------------+-------------------+
    
posted @ 2023-06-23 20:17  绿杉  阅读(37)  评论(0)    收藏  举报