mysql优化

1、从硬件上优化(mysql服务器尽量不要联外网)

硬盘:选用SAS硬盘(15000转)做RAID10,如果公司有钱的话可以使用SSD硬盘
cpu:推荐DELL R710 (双四核16线程或单八核16线程)
内存:推荐32G

2、配置文件优化(参考)

vi /etc/my.cnf

#这是一份DELL R720 32G,RAID10 的参数 
[client]
default-character-set = utf8      #设置客户端字符集

[mysqld]                          #一定要在【mysqld】下面
user=mysql                        #启动mysql进程的运行用户

character-set-server = utf8       #服务端字符集,mysql5.1及以前用这个字符集 #default-character-set = utf8 

socket=/var/lib/mysql/mysql.sock   #服务器与本地客户端进行通信的Unix套接字文件,如果是因为这个文件报错起不来主要看下配置文件是否错误
datadir=/Data/mysql                #存放mysql数据库的主要数据目录,需要先创建并chown授权mysql用户                                                                     
slave-skip-errors=1062,1053,1146   #跳过常见的指定error no类型的错误,这个要在从库上配置,详细见最后
     
server-id = 10                    #用来指定哪个是主库哪个是从库,和用来标识是哪个服务器
log-bin=mysql-bin                  #开启binlog日志,和server-id一起存在
expire_logs_days = 7               #只保留7天bin-log日志

binlog_format=mixed                #mysql复制方法:混合

innodb_buffer_pool_size = 8000M   #当innodb表的索引或数据达到8G的时候再将数据写入磁盘,这个值设为内存的50%左右(否则会造成磁盘IO过高)
max_allowed_packet = 32M          #有时候大的插入和更新会被max_allowed_packet 参数限制掉,导致失败。 或报错[MySQL server has gone away]
key_buffer_size = 2000M           #指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。对于内存在4GB左右的服务器来说,该参数可设置为256MB或384MB。【内存*0.0625】
symbolic-links=0 
wait_timeout=1000 
interactive_timeout=1000 
max-connect-errors=100000 
max-connections=5000

table_open_cache = 256 
sort_buffer_size = 1024K 
net_buffer_length = 32K 
read_buffer_size = 512K 
read_rnd_buffer_size = 1024K 
myisam_sort_buffer_size = 16M 
slow_query_log=1 
thread_cache_size=32 
local-infile=0 
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
skip-character-set-client-handshake = 1 
skip-name-resolve

[mysqldump]


[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysql]

[mysqld_safe] 
log-error=/var/log/mysqld.log                  #指定mysql错误日志
pid-file=/var/run/mysqld/mysqld.pid      #mysql pid文件,   pid 文件记录的是当前 mysqld 进程的 pid,pid 亦即 Process ID

3、权限控制优化(root用户是超级用户)

(1) 删除没用的账户
mysql> select user,host,password  from  mysql.user; 或下面的命令
#mysql> sELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user; 
+-----------+-------------+
| user      | host        |
+-----------+-------------+
| root           | 127.0.0.1  |        #不要删
| root           | 172.16.1.% |
| wordpress | 172.16.1.%  |
| wordpress | 172.16.1.51 |
| root           | 172.16.1.7 |
| wenqiang | 172.16.1.7   |
| root           | ::1    |
|                   | oldboy |
| root           | localhost |       #不要删
+-----------+-------------+
9 rows in set (0.00 sec)
mysql> drop user wenqiang@'172.16.1.%';



(2) 授权用户时尽量不要使用%,比如:(允许本地root用户访问所有数据库并拥有所有权限)
授权格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";
mysql> grant all on *.* to root@'%' identified by '123456';
改为:
mysql> grant all on *.* to root@'10.0.0.10' identified by '123456';

4、案例

(1)某动漫公司线上配置文件(RAID10、内存32GB、DELL R710)

[client]
port            = 3306
socket          = /tmp/mysql.sock
default-character-set=utf8

[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
wait_timeout=1000
interactive_timeout=1000
max-connect-errors=100000
max-connections=2000
innodb_flush_method=O_DIRECT
skip-name-resolve
innodb_buffer_pool_size = 8000M
innodb_additional_mem_pool_size = 16M
innodb_log_buffer_size = 64M
innodb_log_file_size = 256M

skip-external-locking
key_buffer_size = 2000M
max_allowed_packet = 16M
table_open_cache = 256
sort_buffer_size = 1024K
net_buffer_length = 32K
read_buffer_size = 512K
read_rnd_buffer_size = 1024K

myisam_sort_buffer_size = 16M
slow_query_log=1
thread_cache_size=32
long_query_time=2
local-infile=0
log-bin=mysql-bin
binlog_format=mixed
server-id       = 10

character_set_server=utf8
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
skip-character-set-client-handshake = 1

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

(2) 某电商公司的数据库配置文件

电商MySQL数据库配置文件
这是一份电子商务网站MySQL数据库调整后所运行的配置文件/etc/my.cnf(服务器为DELL R710、16GB内存、RAID10),大家可以根据实际的MySQL数据库硬件情况进行调整配置文件如下:
[client]
port   = 3306
socket   = /data/3306/mysql.sock
default-character-set = utf8
 
[mysqld]
user    = mysql
port    = 3306
character-set-server = utf8
socket  = /data/3306/mysql.sock
basedir = /application/mysql
datadir = /data/3306/data
log-error=/data/3306/mysql_err.log
pid-file=/data/3306/mysql.pid
 
log_slave_updates = 1
log-bin = /data/3306/mysql-bin
binlog_format = mixed
binlog_cache_size = 4M
max_binlog_cache_size = 8M
max_binlog_size = 1G
expire_logs_days = 90
binlog-ignore - db = mysql
binlog-ignore - db = information_schema

key_buffer_size = 384M
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 16M
join_buffer_size = 2M
thread_cache_size = 8
query_cache_size = 32M
query_cache_limit = 2M
query_cache_min_res_unit = 2k
thread_concurrency = 32
 
table_cache = 614
table_open_cache = 512
open_files_limit    = 10240
back_log = 600
max_connections = 5000
max_connect_errors = 6000
external-locking = FALSE
 
max_allowed_packet =16M
thread_stack = 192K
transaction_isolation = READ-COMMITTED
tmp_table_size = 256M
max_heap_table_size = 512M
 
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 64M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover

long_query_time = 2
slow_query_log
slow_query_log_file = /data/3306/slow.log
skip-name-resolv
skip-locking
skip-networking
server-id = 1
 
innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 512M
innodb_data_file_path = ibdata1:256M:autoextend
innodb_file_io_threads = 4
innodb_thread_concurrency = 8
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 16M
innodb_log_file_size = 128M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
innodb_file_per_table = 0
 
[mysqldump]
quick
max_allowed_packet = 64M
 
[mysql]
no -- auto - rehash
相关推荐
文韬_武略22 分钟前
android 混淆
android
raychongzi28 分钟前
The option ‘android.enableAapt2‘ is deprecated and should not be used anymore.
android
LLLLLindream34 分钟前
12.18 web后端开发——数据库
数据库·mysql
木子欢儿42 分钟前
Windows Server 2019 配置PHP环境(图文教程)
开发语言·windows·adb·php
drebander1 小时前
深入理解 MySQL 索引
数据库·mysql
老大白菜2 小时前
Python使用PyMySQL操作MySQL完整指南
数据库·python·mysql
日日行不惧千万里2 小时前
Mysql和MariaDB什么关系
数据库·mysql·mariadb
Ahern_3 小时前
RHEL 7.5 源码安装 mysql-5.7.17 数据库
linux·数据库·mysql
海绵宝宝_3 小时前
【HarmonyOS NEXT】ArkTs数据类型解析与使用
android·前端·华为·harmonyos·鸿蒙
明天就是Friday3 小时前
Android Binder 进程间通信
android·binder