前言:之前见过各种各样的安装方式,甚至所有参数都默认的情况也有,有些参数可以在线更改,但是有些参数不得不重启MySQL服务来更改,这不仅对线上环境造成影响,更对咱们运维人员的绳命造成影响(半夜起床重启服务)。因此,对于MySQL标准化安装是非常有必要的,一来对于运维人员来说,各种文件路径放在哪个位置都很清楚,二来标准化的安装可以在一开始就设定好各种参数在一个比较合理的值,尽量避免或者减少重启MySQL服务的可能。
  下面介绍一下MySQL的标准化安装

一、硬件部分

  • 关闭numa

  • 限制设置 /etc/security/limits.conf & 网络优化

  • swap

  • io调度

  • 文件系统

  • selinux&iptables

1.关闭numa
numa的关闭方法可以通过bios关闭,也可以在操作系统层面关闭,这里推荐在bios关闭。
查看是否开启numa

  1. grep -i numa /var/log/dmesg

讲一下在操作系统怎么关闭

  1. cat /boot/grub/grub.conf

在内核对应的位置添加numa=off或者numactl —interleave=all来启动MySQL

2.限制设置&网络优化
查看系统设置

  1. ulimit -a

主要注意
open files可以改成65535
max user processes可以改成65535
修改/etc/security/limits.d/xxx.conf

网络优化方面MySQL可以做的就比较少了,可以看博客:http://wubx.net/php-connect-mysql-hy000-2003/
3.Swap 对于swap把握两个原则:
(1)对于大内存的服务器(64G),可以完全关闭swap
(2)对于小内存的服务器,swap配置4-8G
4.IO调度 sas:deadline
ssd:noop

echo dealine >/sys/block/{DEV-NAME}/queue/scheduler

5.文件系统
数据目录:ext4或者XFS(推荐)
挂载XFS参数:
(rw, noatime,nodiratime,nobarrier)

mount -o rw,noatime,nodiratime,nobarrier /dev/sdb1 /storage

挂载ext4参数:
ext4 (rw,noatime,nodiratime,nobarrier,data=ordered)

6.selinux & iptables
selinux万年坑,直接关闭吧,骚年
iptables看实际情况,如果跑在内网环境下可以不开iptables,否则还是建议开启iptables为佳。

二、软件部分

yum -y install make gcc-c++ cmake bison-devel ncurses-devel numactl libaio
1.创建用户和用户组 groupadd mysql
useradd -s /sbin/nologin -g mysql -M mysql

2.创建mysql基目录
mkdir -p /usr/local/mysql
更改文件夹所属
chown -R mysql.mysql /usr/local/mysql

3.创建目录
mkdir -p /data/mysql/{data,logs,tmp}
更改文件夹所属
chown -R mysql.mysql /data/

4.上传安装包并解压到/usr/local/mysql

5.创建mysql配置文件my.cnf
vim my.cnf

  1. #my.cnf
  2. [client]
  3. port = 3306
  4. socket = /tmp/mysql3306.sock
  5. [mysql]
  6. prompt="\\u@\\h [\\d]>"
  7. #pager="less -i -n -S"
  8. #tee=/opt/mysql/query.log
  9. no-auto-rehash #非自动补全
  10. [mysqld]
  11. #misc
  12. user = mysql
  13. basedir = /usr/local/mysql
  14. datadir = /data/mysql/data
  15. port = 3306
  16. socket = /tmp/mysql3306.sock
  17. event_scheduler = 0
  18. tmpdir = /data/mysql/tmp
  19. #timeout
  20. interactive_timeout = 300
  21. wait_timeout = 300
  22. #character set
  23. character-set-server = utf8
  24. open_files_limit = 65535
  25. max_connections = 100
  26. max_connect_errors = 100000
  27. lower_case_table_names =1
  28. #file
  29. #@secure-file-priv=/tmp
  30. #symi replication
  31. #rpl_semi_sync_master_enabled=1
  32. #rpl_semi_sync_master_timeout=1000 # 1 second
  33. #rpl_semi_sync_slave_enabled=1
  34. #logs
  35. log-output=file
  36. slow_query_log = 1
  37. slow_query_log_file = slow.log
  38. log-error = error.log
  39. log_warnings = 2
  40. pid-file = mysql.pid
  41. long_query_time = 1
  42. #log-slow-admin-statements = 1
  43. #log-queries-not-using-indexes = 1
  44. log-slow-slave-statements = 1
  45. #binlog
  46. #binlog_format = STATEMENT
  47. binlog_format = row
  48. server-id = 1003306
  49. log-bin = /data/mysql/logs/mysql-bin
  50. max_binlog_size = 256M
  51. sync_binlog = 0
  52. expire_logs_days = 10
  53. #procedure
  54. log_bin_trust_function_creators=1
  55. #file
  56. secure_file_priv="/tmp"
  57. #
  58. gtid-mode = on
  59. enforce-gtid-consistency=1
  60. #relay log
  61. skip_slave_start = 1
  62. max_relay_log_size = 1024M
  63. relay_log_purge = 1
  64. relay_log_recovery = 1
  65. relay-log=relay-bin
  66. relay-log-index=relay-bin.index
  67. log_slave_updates
  68. #slave-skip-errors=1032,1053,1062
  69. #skip-grant-tables
  70. #buffers & cache
  71. table_open_cache = 2048
  72. table_definition_cache = 2048
  73. table_open_cache = 2048
  74. max_heap_table_size = 96M
  75. sort_buffer_size = 128K
  76. join_buffer_size = 128K
  77. thread_cache_size = 200
  78. query_cache_size = 0
  79. query_cache_type = 0
  80. query_cache_limit = 256K
  81. query_cache_min_res_unit = 512
  82. thread_stack = 192K
  83. tmp_table_size = 96M
  84. key_buffer_size = 8M
  85. read_buffer_size = 2M
  86. read_rnd_buffer_size = 16M
  87. bulk_insert_buffer_size = 32M
  88. #myisam
  89. myisam_sort_buffer_size = 128M
  90. myisam_max_sort_file_size = 10G
  91. myisam_repair_threads = 1
  92. #innodb
  93. innodb_buffer_pool_size = 4G
  94. innodb_buffer_pool_instances = 1
  95. innodb_data_file_path = ibdata1:1024M:autoextend
  96. innodb_flush_log_at_trx_commit = 2
  97. innodb_log_buffer_size = 8M
  98. innodb_log_file_size = 1024M
  99. innodb_log_files_in_group = 3
  100. innodb_max_dirty_pages_pct = 50
  101. innodb_file_per_table = 1
  102. innodb_rollback_on_timeout
  103. innodb_io_capacity = 2000
  104. transaction_isolation = READ-COMMITTED
  105. innodb_flush_method = O_DIRECT

6.初始化数据库
mysql5.6:/usr/local/mysql/scripts/mysql_install_db —basedir=/usr/local/mysql/ —datadir=/data/mysql/data —defaults-file=/etc/my.cnf —user=mysql
mysql5.7:/usr/local/mysql/bin/mysqld —defaults-file=/etc/my.cnf —initialize


若出现

  1. (Can't locate Data/Dumper.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at scripts/mysql_install_db line 42.
  2. BEGIN failed--compilation aborted at scripts/mysql_install_db line 42.)

执行下面命令
yum install ‘perl(Data::Dumper)’

7.添加环境变量
vim /etc/profile
export PATH=$PATH:/usr/local/mysql/bin

8.环境变量生效
. /etc/profile

9.启动数据库服务
mysqld_safe —defaults-file=/etc/my.cnf 2>&1 > /dev/null &

10.更改系统变量
echo “export PATH=$PATH:/usr/local/mysql/bin” >>/etc/profile
source /etc/profile