Mysql体系结构

root
233
文章
0
评论
2021年6月9日15:56:54 评论 7224字阅读24分4秒

Mysql体系结构

数据库:

  • 物理操作系统文件或其他形式文件类型的集合

 

数据库实例:

  • 由数据库后台进程/线程以及一个共享内存区域组成
  • 共享内存可以被运行的后台 进程/线程所共享
  • 数据库实例才是真正用来操作数据库文件的

 

创建database kaola

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.16 sec)

mysql> create database kaola;
Query OK, 1 row affected (0.01 sec)

删除数据库

mysql> drop database kaola;
Query OK, 0 rows affected (0.38 sec)

 

Mysql主要文件

数据库配置文件

  • /etc/my.cnf【最优配置模板】
[client]
user = root  --用户
password = 1111aaA_  -- 密码
 
[mysql]
prompt = [\u@\p][\d]>\_  -- cmd控制台前显示: node1 [localhost] {sa} (mysql)  而不是就是 mysql>
no-auto-rehash  --开启命令自动补全功能
 
[mysqld_safe]
malloc-lib=tcmalloc  --合适的内存分配算法tcmalloc,是谷歌提供的内存分配管理模块
 
[mysqldump]
single-transaction
 
[mysqld]
# basic settings #
user = mysql
sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"
autocommit = 1  --自动提交事务
server-id = 8888   --服务器ID
character_set_server=utf8mb4  --服务器数据库的字符集合
datadir=/mysql_data/data   --数据目录
transaction_isolation = READ-COMMITTED  --数据库隔离级别 ,已提交读
explicit_defaults_for_timestamp = 1  --
max_allowed_packet = 64M  --最大控制其通信缓冲区的server接受的数据包大小(lob字段)
event_scheduler = 1  --开启事件调度
 
# connection #
interactive_timeout = 1800
wait_timeout = 1800
lock_wait_timeout = 1800
skip_name_resolve = 1
max_connections = 1024
max_user_connections = 256
max_connect_errors = 1000000
 
# table cache performance settings
table_open_cache = 4096
table_definition_cache = 4096
table_open_cache_instances = 64
 
# session memory settings #
read_buffer_size = 16M
read_rnd_buffer_size = 32M
sort_buffer_size = 32M
tmp_table_size = 64M
join_buffer_size = 128M
thread_cache_size = 64
 
# log settings #
log_error = error.log
log_bin = binlog
log_error_verbosity = 2
general_log_file = general.log

# slow log
slow_query_log = 1 //开启慢sql日志
slow_query_log_file = slow.log //慢日志文件名
long_query_time = 2 //超过2秒的慢sql记录
min_examined_row_limit = 100  //至少执行100行的SQL才会被检测 
log_queries_not_using_indexes = 1 //记录没有使用索引的查询
log_throttle_queries_not_using_indexes = 10 //限制每分钟记录没有使用索引SQL语句的次数
log_slow_admin_statements = 1 //管理命令执行慢的也放到慢日志里
log_slow_slave_statements = 1  //从库上执行的慢查询也放到慢日志
expire_logs_days = 90  --日志过期天数

log-bin-trust-function-creators = 1
log-slave-updates = 1  --从库产生binlog日志,从库就可以做主库
 
# innodb settings #
innodb_page_size = 16384
innodb_buffer_pool_size = 160G
innodb_buffer_pool_instances = 16
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_lru_scan_depth = 4096
innodb_lock_wait_timeout = 5
innodb_io_capacity = 10000
innodb_io_capacity_max = 20000
innodb_flush_method = O_DIRECT
innodb_undo_logs = 128
innodb_undo_tablespaces = 3
innodb_flush_neighbors = 0
innodb_log_file_size = 16G
innodb_log_files_in_group = 2
innodb_log_buffer_size = 64M
innodb_purge_threads = 4
innodb_large_prefix = 1
innodb_thread_concurrency = 64
innodb_print_all_deadlocks = 1
innodb_strict_mode = 1
innodb_sort_buffer_size = 128M
innodb_write_io_threads = 16
innodb_read_io_threads = 16
innodb_file_per_table = 1
innodb_stats_persistent_sample_pages = 64
innodb_autoinc_lock_mode = 2
innodb_online_alter_log_max_size=1G
innodb_open_files=4096
 
# replication settings #
master_info_repository = TABLE  --master_info存放到数据库表里
relay_log_info_repository = TABLE  --relay_log_info存放到数据库表里
sync_binlog = 1  --异步日志提交
gtid_mode = on
enforce_gtid_consistency = 1
log_slave_updates
binlog_format = ROW  --binlog使用row模式
binlog_rows_query_log_events = 1
relay_log = relay.log
relay_log_recovery = 1  --relay_log出错或者中断,重新从master服务器抽取
slave_skip_errors = ddl_exist_errors
slave-rows-search-algorithms = 'INDEX_SCAN,HASH_SCAN'
 
# semi sync replication settings #
plugin-load = "group_replication.so;validate_password.so;semisync_master.so;semisync_slave.so"
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_master_timeout = 3000
loose_rpl_semi_sync_slave_enabled = 1
 
# password plugin #
validate_password_policy = STRONG
validate-password = FORCE_PLUS_PERMANENT
 
# perforamnce_schema settings
performance-schema-instrument='memory/%=COUNTED'
performance_schema_digests_size = 40000
performance_schema_max_table_instances = 40000
performance_schema_max_sql_text_length = 4096
performance_schema_max_digest_length = 4096
 
[mysqld-5.6]
//-5.6代表这个参数只能在5.6上生效
# metalock performance settings
//表示源数据有多少锁,5.7无锁这个参数没有
metadata_locks_hash_instances = 64 //表示源数据有多少锁
 
[mysqld-5.7]
# new innodb settings #
loose_innodb_numa_interleave = 1
innodb_buffer_pool_dump_pct = 40
innodb_page_cleaners = 16
innodb_undo_log_truncate = 1
innodb_max_undo_log_size = 2G
innodb_purge_rseg_truncate_frequency = 128
 
# new replication settings #
slave-parallel-type = LOGICAL_CLOCK   --开启组提交
slave-parallel-workers = 16   --组提交线程数16个
slave_preserve_commit_order = 1
slave_transaction_retries = 128
# other change settings #
binlog_gtid_simple_recovery = 1
log_timestamps = system
show_compatibility_56 = on
 
# group replication settings
plugin-load = "group_replication.so;validate_password.so;semisync_master.so;semisync_slave.so"
transaction-write-set-extraction = XXHASH64
 
# report_host = 127.0.0.1 # optional for group replication
# binlog_checksum = NONE # only for group replication
loose_group_replication = FORCE_PLUS_PERMANENT
loose_group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
loose_group_replication_compression_threshold = 100
loose_group_replication_flow_control_mode = 0
loose_group_replication_single_primary_mode = 0
loose_group_replication_enforce_update_everywhere_checks = 1
loose_group_replication_transaction_size_limit = 10485760
loose_group_replication_unreachable_majority_timeout = 120
loose_group_replication_start_on_boot = 0

 

表结构定义文件

在数据目录里没创建一张表,就会有一个*.frm文件,表结构定义文件

mysq utilities工具包

mysqlfrm 离线解析.frm文件工具

mysqlfrm --diagnostic xx,frm --server=root:密码@localhost

 

错误文件

参数:log_errpr

  • 默认名:机器名.err
  • 建议统一修改一个固定名字,例如mysql.err
[mysqkd]
log_error = mysql.err

可将配置错误日志到系统日志文件[没啥必要]

[mysqld_safe]
syslog
syslog_tag = stock

 

慢查询日志【数据库查询很慢,看这个日志】

将运行超过某个时间阈值的SQL语句记录到文件

  • 慢查询
  • 默认名:机器名-slow.log

慢查询-相关参数

slow_query_log                    开启慢查询日志
slow_query_log_file               慢查询日志文件名
long_query_time                   指定慢查询阈值
min_examined_row_limit            扫描记录少于该值的SQL不记录到慢查询日志
log_queries_not_using_indexxes    将没有使用索引的SQL记录到慢查询日志
log_throttle_queries_not_using_indexes 限制每分钟记录没有使用索引SQL语句的次数
log_slow_admin_statement          记录管理操作,如ALTER/ANALYZE TABLE
log_output                        慢查询日志的格式
log_slow_slave_statements         在从服务器上开启慢查询日志
log_timestamps                    写入时区信息

 

模拟慢查询,超出配置文件中设置的时间,sql语句就会被记录在慢查询日志里【没加min_examined_row_limit 】

mysql> select sleep(3);
+----------+
| sleep(3) |
+----------+
|        0 |
+----------+
1 row in set (3.35 sec)
[root@master01 sys]# cat /data/mysql-data/slow.log 
/data/mysql/bin/mysqld, Version: 5.7.33-log (MySQL Community Server (GPL)). started with:
Tcp port: 3306  Unix socket: /data/mysql/run/mysql.sock
Time                 Id Command    Argument
# Time: 2021-06-07T08:45:54.851958Z
# User@Host: root[root] @ localhost []  Id:     3
# Query_time: 3.348062  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1623055554;
select sleep(3);
# Time: 2021-06-07T08:48:44.266693Z
# User@Host: root[root] @ localhost []  Id:     4
# Query_time: 4.000647  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1623055724;
select sleep(4);

 

关闭命令

mysql> show variables like 'slow%';
+---------------------+----------+
| Variable_name       | Value    |
+---------------------+----------+
| slow_launch_time    | 2        |
| slow_query_log      | ON       |
| slow_query_log_file | slow.log |
+---------------------+----------+
3 rows in set (0.00 sec)
mysql> set global long_query_time = 3;
Query OK, 0 rows affected (0.00 sec)

 

当slow.log文件过大的时候如何清空

如果使用echo "">/xxx/slow.log 命令,并不会释放磁盘空间

//1.先修改名称
mv slow.log slow.log-2021.6.7
//2.执行SQL语句,关闭句柄数,新建slow.log
flush slow logs;
//3.删除slow.log-2021.6.7

 

通用日志【开启性能下降明显,下降50%】

可以记录数据库所有相关操作

  • 参数:general_log
  • 默认文件名:机器名.log

同样可以将日志保存到表

  • mysql.general_log

 

Mysql存储引擎

查看当前mysql数据库中有多少存储引擎

mysql> show engines \G

 

启动时可以禁用某些存储引擎

  • --skip-archive
  • --skip-blackhole
# engine
skip-archive
skip-blackhole

 

Memory存储引擎是不能禁用的

 

 

 

 

 

继续阅读
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2021年6月9日15:56:54
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
Mysql 创建表 MySQL

Mysql 创建表

Mysql 创建表   Mysql创建数据库 CREATE DATABASE db_name //字符集 CHARACTER SET charset_name //校验规则 COLLATE ...
Mysql数据类型 MySQL

Mysql数据类型

Mysql数据类型   INT整形类型---属性 unsigned/signed 无符号/有符号 unsigned无符号,创建一个无符号的列 mysql> create table z...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: