mysql运维日记(一):安装与配置

觉人间 万事到秋来 都摇落

主要参考mysql官方手册,mysql版本:mysql Ver 8.0.12 for osx10.14 on x86_64。内容主要参考自msyql官方文档,容易出错的部分标记为红色
不知道为啥csdn的md会把代码行标记成红色,也是佛了……

mysql运维日记(一):安装与配置

安装

  • mysql的安装一般都是用yum/apt/brew等命令安装,线上环境也有专门的运维安装。如果是自己来装msyql,不推荐使用自动安装程序,因为要保证版本一致,并且要安装到指定目录,自动安装有时候一不小心就升级了yum导致升级了gcc版本等,所以推荐使用压缩包+脚本的安装方式。压缩包中应该包含配置好的my.cnf。

  • 脚本范例

    • 压缩包解压后编译安装(参照mysql官网)。比较适合只安装一个,例如测试环境下的安装。
    • 压缩包解压后复制安装。比较适合批量安装。点击这里

启动与关闭

  • mysql在安装时会创建mysql用户,其使用的文件权限皆为:mysql:mysql。如果不知道mysql账号的密码,可以先su到root然后再su mysql,不过有的选项只能在以root启动的模式下才能生效,比如mysql可创建的文件数,文件大小等。可以创建任意指定用户的文件夹,然后以该用户操作亦可。为了统一起见推荐使用默认的mysql:mysql权限。

  • 如果启动过程中遇到文件找不到或者文件没权限,先切到root用户下试试。不过mysql官方是强烈不建议这么做的……。

    Make sure that the data directory for each server is fully accessible to the Unix account that the specific mysqld process is started as. Do not use the Unix root account for this, unless you know what you are doing.

mysql脚本

  • mysqld:mysql服务器

    mysqld,也称为MySQL Server,是完成MySQL安装中大部分工作的主程序。MySQL Server管理对包含数据库和表的MySQL数据目录的访问。数据目录也是其他信息(如日志文件和状态文件)的默认位置。

    • mysqld一般会注册到service上所以他有三种方式,这种方式都是直接调用msqld,并读取默认配置文件
      1. /etc/init.d/mysql start|stop|restart
      2. service mysql start|stop|restart
      3. mysqld --参数=参数值 参数值优先级高于配置文件中的值
  • mysql_safe:启动脚本

    • 要用配置文件启动msqyld_safe,需要在my.cnf中添加[mysqld_safe]模块.启动:/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql.不知道为啥它没有关闭mysqld的指令……可能是我没找到吧。用mysqladmin -uroot -p123 shutdown
    • 关于mysqld_safe:

    mysqld_safe是在Unix上启动 mysqld服务器的推荐方法 。 mysqld_safe添加了一些安全功能,例如在发生错误时重新启动服务器并将运行时信息记录到错误日志中。此外在mysqld进程死了以后会立即重启mysqld。

    • 比较推荐mysqld_safe来控制mysqld,但是mysql的官方文档中却不推荐,认为这是没有必要的。对systemd不熟,觉得太复杂了,systemd虽然也可以在进程kill掉了以后重启mysqld但没找到怎么配置,不如用mysqld_safe,岂不美哉?(=王朗脸=)原文:

    For some Linux platforms, MySQL installation from RPM or Debian packages includes systemd support for managing MySQL server startup and shutdown. On these platforms, mysqld_safe is not installed because it is unnecessary.

    • mysqld_safe中有一个log-error选项,可以控制mysql的日志流向,但是mysql官方文档却标记成deprecated,认为日志应该交给mysqld来控制,所以在[mysql]模块中指定错误日志文件即可,safe模块没必要额外指定.

    Controlling mysqld logging from mysqld_safe is deprecated. Use the server’s native syslog support instead.

    systemd是一套Linux系统的基本构建块。它提供了一个系统和服务管理器,它以PID 1的形式运行并启动系统的其余部分。systemd提供积极的并行化功能,使用套接字和D-Bus激活来启动服务,提供按需启动守护进程,使用Linux控制组跟踪进程,维护挂载和自动挂载点,以及实现精心设计的基于事务依赖性的服务控制逻辑。systemd支持SysV和LSB init脚本,可以替代sysvinit。其他部分包括日志记录守护程序,用于控制基本系统配置的实用程序,如主机名,日期,区域设置,维护登录用户列表以及运行容器和虚拟机,系统帐户,运行时目录和设置以及用于管理简单网络的守护程序配置,网络时间同步,日志转发和名称解析。当作为系统实例运行时, systemd 将会按照 system.conf 配置文件 以及 system.conf.d 配置目录中的指令工作; 当作为用户实例运行时,systemd 将会按照 user.conf 配置文件 以及 user.conf.d 配置目录中的指令工作。

    • 关于systemd中mysql的配置可以看这里
  • mysql.server:mysql启动脚本

    • 跟mysql_safe没区别 mysql.server [start|stop]
    • 官方文档里有这么一句话:cp mysql.server /etc/init.d/mysql 也就是说systemd的方式跟safe其实是一样的?

    Unix和类Unix系统上的MySQL发行版包括一个名为mysql.server的脚本,该脚本使用mysqld_safe启动MySQL服务器。它可以在Linux和Solaris等使用System V样式运行目录来启动和停止系统服务的系统上使用。它也被macOS Startup Item for MySQL使用。

  • mysqld_multi:管理多个mysql服务器

    • 操作方式mysqld_multi [options] {start|stop|reload|report} [GNR[,GNR] ...]
    • mysqld_multi start 17
    • mysqld_multi stop 8,10-13

    mysqld_multi旨在管理几个 侦听不同Unix套接字文件和TCP / IP端口上的连接的 mysqld进程。它可以启动或停止服务器,或报告其当前状态。
    mysqld_multi搜索 在 (或在选项命名的文件中)命名的组 。 可以是任何正整数。此编号在以下讨论中称为选项组编号,或。组号将选项组彼此区分开来,并用作 mysqld_multi的参数,以指定要为其启动,停止或获取状态报告的服务器。这些组中列出的选项与用于启动 mysqld的组中使用的 选项相同。但是,当使用多个服务器时,每个服务器都必须使用自己的值来选择Unix套接字文件和TCP / IP端口号等选项。

    • 关于多个mysql的详细内容,那又是另一个故事了。

配置

  • my.cn作为mysqld的配置文档,指定了默认值,其文档结构如下:

    [模块名]
    此模块下的值
    
    
  • mysqld从[mysqld]和[server] 组中读取选项 。mysqld_safe的读取选项 [mysqld],[server], [mysqld_safe],和 [safe_mysqld]。 mysql.server从[mysqld]和[mysql.server] 组中读取参数

  • my.cnf详细内容如下


# Example MySQL config file for very large systems.
#
# This is for a large system with memory of 1G-2G where the system runs mainly
# MySQL.
#
# You can copy this file to
# /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is /lhrg/mysql/mysql/var) or
# ~/.my.cnf to set user-specific options.
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.

# The following options will be passed to all MySQL clients
[client]
port               = 3306
socket             = /tmp/mysql.sock
default-character-set =utf8mb4

[mysql]
prompt="(\u@\h:)[\d]> "

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
user= mysql
port= 3306
socket=/tmp/mysql.sock
datadir="/lhrg/mysql/mysqldata/data"     

skip-external-locking
skip-name-resolve

#global_parameter_setting


default_storage_engine = InnoDB
character-set-server = utf8mb4
max_length_for_sort_data= 2048

table_open_cache = 1024   
sort_buffer_size = 16M
read_buffer_size = 16M
max_tmp_tables = 2000
thread_cache_size = 5000
wait_timeout=2592000
interactive_timeout=2592000
net_read_timeout = 300
net_write_timeout =300


max_connections = 5000 
max_allowed_packet = 32M
event_scheduler=1
lower_case_table_names=1
open_files_limit=60000

back_log=200
log_warnings = 2

tmp_table_size = 128M
max_heap_table_size = 128M


key_buffer_size = 10M
query_cache_size = 0
query_cache_type = 0
concurrent_insert =2
bulk_insert_buffer_size=32M
# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id = 1


###Uncomment the following if you are using InnoDB tables

# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 1G
innodb_additional_mem_pool_size = 16M
innodb_file_per_table=1  
innodb_data_home_dir       = /lhrg/mysql/mysqldata/ibdata
innodb_data_file_path      = ibdata1:1G:autoextend
innodb_log_group_home_dir  = /lhrg/mysql/mysqllog/redolog
##Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size       = 512M
innodb_log_buffer_size     = 32M
innodb_log_files_in_group  = 4
innodb_flush_log_at_trx_commit =0 
innodb_flush_method = O_DIRECT
innodb_max_dirty_pages_pct  = 60
innodb_adaptive_flushing    = 1
innodb_old_blocks_pct       = 37
innodb_old_blocks_time      = 1000

innodb_use_native_aio       = 1
innodb_use_sys_malloc       = 1
innodb_thread_concurrency   = 0
innodb_purge_threads        = 1
innodb_purge_batch_size     = 300
innodb_change_buffering     = all    
innodb_file_format_check    = 1
innodb_stats_on_metadata    = 0


innodb_lock_wait_timeout = 10
innodb_io_capacity=200
innodb_read_io_threads=8
innodb_write_io_threads =16
innodb_file_format = barracuda
#innodb_file_format_check = barracuda
innodb_open_files=30000

######slowquery
slow_query_log = 0
slow_query_log_file = /lhrg/mysql/mysqllog/slowquery/slow-query.log
log-queries-not-using-indexes= true
long_query_time  = 1

##### Replication Master Server (default)
##### binary logging is required for replication
log-bin          = /lhrg/mysql/mysqllog/binlog/mysql-bin.bin
binlog_format= MIXED
max-binlog-size  = 512M
expire_logs_days = 3
binlog_cache_size = 32M
log_bin_trust_function_creators =1


#####slave log
relay-log=/lhrg/mysql/mysqllog/relaylog/relay-log.bin
relay-log-index=/lhrg/mysql/mysqllog/relaylog/relay-log.index
relay-log-info-file=/lhrg/mysql/mysqllog/relaylog/relay-log.info


[mysqldump]
quick
max_allowed_packet = 32M

[isamchk]
key_buffer = 128M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 128M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

[mysqld_safe]
datadir=/lhrg/mysql/mysqldata/data
pid-file=/lhrg/mysql/mysqldata/data/localhost.localdomain.pid

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值