当前位置:   article > 正文

DBA工作经验总结

DBA工作经验总结

目录

一、MySQL8.0创建一张规范的表

1.表、字段全采用小写

2.int类型不再加上最大显示宽度

3.每张表必须显式定义自增int类型的主键

4.建表时增加comment来描述字段和表的含义(防止以后忘记)

5.建议包含create_time和update_time字段

6.核心业务增加记录标记字段

7.用尽量少的存储空间来存储一个字段的数据

8.存储精确浮点数必须使用DECIMAL

9.尽量能不使用TEXT、BLOB类型

10.添加合适的索引增加查询速度

11.字符集建议使用utf8mb4

12.存储引擎建议使用InnoDB

13.但表字段数目建议小于30

二、MySQL8.0需要调整的参数

1.缓冲池大小和数量

2.最大连接客户端数(默认151,通常不够用)

3.Binlog相关参数

4.数据目录

5.服务ID

6.只读参数

7.双一参数

8.开启GTID

9.采用独立表空间

10.不区分大小写

11.IO操作数

12.重做日志相关

13.慢查询相关参数

14.连接超时参数

15.事务隔离级别

16.InnoDB行锁等待时间

17.死锁信息记录在错误日志里


一、MySQL8.0创建一张规范的表

例:

  1. CREATE TABLE student_info (
  2. `id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
  3. `stu_name` VARCHAR(10) NOT NULL DEFAULT '' COMMENT '姓名',
  4. `stu_class` VARCHAR(10) NOT NULL DEFAULT '' COMMENT '班级',
  5. `stu_num` INT NOT NULL DEFAULT '0' COMMENT '学号',
  6. `stu_score` SMALLINT UNSIGNED NOT NULL DEFAULT '0' COMMENT '总分',
  7. `tuition` DECIMAL(5, 2) NOT NULL DEFAULT '0' COMMENT '学费',
  8. `phone_number` VARCHAR(20) NOT NULL DEFAULT '0' COMMENT '电话号码',
  9. `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
  10. `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
  11. `status` TINYINT NOT NULL DEFAULT '1' COMMENT '1代表记录有效,0代表记录无效',
  12. PRIMARY KEY (`id`),
  13. UNIQUE KEY uniq_stu_num (`stu_num`),
  14. KEY idx_stu_score (`stu_score`),
  15. KEY idx_update_time_tuition (`update_time`, `tuition`)
  16. ) ENGINE = INNODB charset = utf8mb4 COMMENT '学生信息表';
1.表、字段全采用小写

https://img1.sycdn.imooc.com/climg/65fe44d60938d19c07800178.jpg

(0 区分大小写,1 不区分大小写)

2.int类型不再加上最大显示宽度

https://img1.sycdn.imooc.com/climg/65fe460209e6e6ba11730449.jpg

3.每张表必须显式定义自增int类型的主键

如果innodb没有显示定义主键,可能会选择唯一索引作为主键,唯一索引在写入的过程可能不是递增的,写入数据时可能会导致数据页频繁分裂,从而导致写入效率低和页空间浪费。另外主键能保证每一行的唯一性,在日常使用也会很方便,提升查询效率、归档处理。

4.建表时增加comment来描述字段和表的含义(防止以后忘记)

https://img1.sycdn.imooc.com/climg/65fe47b709f7486b13830406.jpg

5.建议包含create_time和update_time字段

用于审计和跟踪,方便查看创建更新、时间,分析问题方便。

数据归档也可以根据这两个字段处理。

6.核心业务增加记录标记字段

https://img1.sycdn.imooc.com/climg/65fe493009937e2513630410.jpg

7.用尽量少的存储空间来存储一个字段的数据

例:能用int就不varchar/char, 能用tinyint就不用int.

8.存储精确浮点数必须使用DECIMAL
9.尽量能不使用TEXT、BLOB类型

浪费磁盘空间,影响性能

如果某一个字段必须使用,建议单独建一张表

10.添加合适的索引增加查询速度
11.字符集建议使用utf8mb4

如果应用程序使用多种语言,使用utf8mb4可以防止乱码,支持多种语言

12.存储引擎建议使用InnoDB

绝大多数情况使用:​主持事务、行锁、在线备份、支持MVCC多版本并发控制

13.但表字段数目建议小于30

列越多,越影响性能,结构变得越复杂,不利于维护和管理

二、MySQL8.0需要调整的参数

  1. ###配置文件举例
  2. [client]
  3. port = 3306
  4. socket = /tmp/mysql.sock
  5. [mysqld]
  6. port = 3306
  7. socket = /tmp/mysql.sock
  8. ## dir set
  9. datadir = /data/mysql/data
  10. innodb_data_home_dir = /data/mysql/data
  11. innodb_log_group_home_dir = /data/mysql/data
  12. log-bin = /data/mysql/binlog/mysql-bin
  13. max_binlog_size = 1G
  14. log_bin_index = /data/mysql/binlog/mysql-bin.index
  15. relay-log = /data/mysql/binlog/mysql-relay-bin
  16. tmpdir = /data/mysql/tmpdir
  17. slow_query_log_file = /data/mysql/log/mysql-slow.log
  18. general_log_file = /data/mysql/log/mysql-general.log
  19. log-error = /data/mysql/log/mysql.err
  20. ## slave and binlog
  21. server_id = 6666
  22. skip-slave-start = 0
  23. read_only = 0
  24. binlog_format = row
  25. log_slave_updates = 1
  26. master_info_repository = table
  27. relay_log_info_repository = table
  28. relay_log_purge = 1
  29. relay_log_recovery = 1
  30. sync_binlog = 100
  31. binlog_cache_size = 1M
  32. binlog_expire_logs_seconds = 2592000
  33. log_bin_trust_function_creators = 1
  34. slave_net_timeout=60
  35. #binlog_error_action="IGNORE_ERROR"
  36. innodb_autoinc_lock_mode=1
  37. ##
  38. back_log = 200
  39. bulk_insert_buffer_size = 8M
  40. #character-set-server = utf8
  41. lower_case_table_names = 1
  42. ## 基线
  43. local-infile = off
  44. skip-networking = off
  45. skip-name-resolve = on
  46. ## connect
  47. max_allowed_packet = 32M
  48. max_connect_errors = 1000
  49. max_connections = 1000
  50. wait_timeout = 3600
  51. interactive_timeout = 3600
  52. table_open_cache = 4096
  53. thread_cache_size = 64
  54. thread_stack = 192K
  55. transaction_isolation = REPEATABLE-READ #
  56. pid-file = mysql.pid
  57. ## slow
  58. slow_query_log = 1
  59. long_query_time = 1
  60. log_slow_admin_statements
  61. log_queries_not_using_indexes = 0
  62. slow_launch_time = 1
  63. read_buffer_size = 4M
  64. read_rnd_buffer_size = 8M
  65. sort_buffer_size = 8M
  66. join_buffer_size = 32M
  67. tmp_table_size = 128M
  68. max_heap_table_size = 128M
  69. default_storage_engine = innodb
  70. explicit_defaults_for_timestamp = on
  71. ## innodb
  72. innodb_buffer_pool_size = 1G
  73. innodb_max_dirty_pages_pct = 80
  74. innodb_thread_concurrency = 8
  75. innodb_buffer_pool_instances = 2
  76. innodb_flush_log_at_trx_commit = 2
  77. innodb_read_io_threads = 8
  78. innodb_write_io_threads = 4
  79. innodb_io_capacity = 1000
  80. innodb_io_capacity_max = 2000
  81. innodb_lru_scan_depth = 1024
  82. innodb_use_native_aio = 1
  83. innodb_flush_neighbors = 1
  84. innodb_buffer_pool_load_at_startup = 1
  85. innodb_buffer_pool_dump_at_shutdown = 1
  86. innodb_data_file_path=ibdata:1G:autoextend
  87. innodb_log_files_in_group = 3
  88. innodb_log_file_size = 2G
  89. innodb_file_per_table = 1
  90. innodb_flush_method = O_DIRECT
  91. innodb_strict_mode = 1
  92. innodb_lock_wait_timeout = 30
  93. innodb_log_buffer_size = 16M
  94. innodb_adaptive_flushing = 1
  95. innodb_change_buffering = all
  96. innodb_purge_threads = 4
  97. innodb_purge_batch_size = 300
  98. innodb_old_blocks_time = 1
  99. innodb_fast_shutdown = 0
  100. performance_schema = 1
  101. innodb_print_all_deadlocks = 1
  102. innodb_sort_buffer_size = 4M
  103. innodb_page_size = 16k
  104. gtid_mode=on
  105. enforce_gtid_consistency=on
  106. table_open_cache_instances=16
  107. binlog_rows_query_log_events=1
  108. ## pasword
  109. default_password_lifetime=0
  110. [mysqldump]
  111. quick
  112. max_allowed_packet = 32M
  113. [mysql]
  114. no-auto-rehash
  115. prompt=\p@\d>\_
  116. [mysqld_safe]
  117. open-files-limit = 28192
  118. [mysqlhotcopy]
  119. interactive-timeout
1.缓冲池大小和数量

innodb_buffer_pool_size = 1G  在机器内存的60%~80%

需要留一部分内存给系统。

2.最大连接客户端数(默认151,通常不够用)

max_connections = 1000

3.Binlog相关参数

bin_log路径

https://img1.sycdn.imooc.com/climg/65fe7f7c09d7995108060296.jpg

binlog_format = row   行模式

binlog_expire_logs_seconds = 2592000      (30天自动清除)

log_slave_updates = 1     ​主从库开启复制,建议全部开启

4.数据目录

配置单独的数据盘,提高查询效率

https://img1.sycdn.imooc.com/climg/65fe80b509ce0d3d08050313.jpg

5.服务ID

server_id =     ​    ​(    ​    ​建议设备IP后两段,防止同一机房ID冲突)

https://img1.sycdn.imooc.com/climg/65fe80d4091dee1904040097.jpg

6.只读参数

read_only = 0     (一般主库关闭0,从库开启1)

https://img1.sycdn.imooc.com/climg/65fe815e09888aa004530135.jpg

7.双一参数

sync_binlog = 100   执行100个事务再落盘  (一致性要求高就减小数值)

8.开启GTID

https://img1.sycdn.imooc.com/climg/65fe8256095c41cd03650090.jpg

9.采用独立表空间

https://img1.sycdn.imooc.com/climg/65fe82ae092d0c0204140080.jpg

10.不区分大小写

https://img1.sycdn.imooc.com/climg/65fe82c20950488604020046.jpg

11.IO操作数

https://img1.sycdn.imooc.com/climg/65fe82df09037f1604120070.jpg

12.重做日志相关

https://img1.sycdn.imooc.com/climg/65fe83150917fa9605670122.jpg

13.慢查询相关参数

https://img1.sycdn.imooc.com/climg/65fe836509bb633004450082.jpg

https://img1.sycdn.imooc.com/climg/65fe836c096e408a07110070.jpg

14.连接超时参数

https://img1.sycdn.imooc.com/climg/65fe839f09c555eb03810070.jpg

15.事务隔离级别

https://img1.sycdn.imooc.com/climg/65fe83f00908dcdd05960066.jpg

16.InnoDB行锁等待时间

https://img1.sycdn.imooc.com/climg/65fe846b094d619f04100076.jpg

17.死锁信息记录在错误日志里

https://img1.sycdn.imooc.com/climg/65fe84aa0968ba6204440066.jpg

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/310137
推荐阅读
相关标签
  

闽ICP备14008679号