第六周作业
@第六周作业
-
完成将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
-
掌握如何获取SQL命令的帮助,基于帮助完成添加testdb库,字符集utf8, 排序集合utf8_bin
答:以rocky8 为例
官网帮助文档:https://dev.mysql.com/doc/refman/8.0/en/create-database.html注意:1. 先查看命令的一些使用帮助:("其他命令举一反三!")
root@rocky8 ~]#mysqlhelp --查看客户端操作帮助
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
-
创建一个主机表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
);
-
给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); -
总结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; --没有条件全改
基于"语句"记录: 则 只记录执行语句一条命令。
基于"行"记录: 则 会记录每条学生修改的命令("这里全部")
混合模式: 则二进制日志文件的构成:
- 日志文件:mysql|mariadb-bin.<文件名后缀>,二进制格式,如: on.000001,mariadb-bin.000002
- 索引文件: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 | usehellodb; 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 | | | | +------------------+----------+--------------+------------------+-------------------+
浙公网安备 33010602011771号