Linux系统下自行编译安装MySQL及基础配置全过程解析_MySQL
安装依赖: CentOS: # yum -y install wget gcc-c++ cmake make bison ncurses-devel perl unzip Ubuntu:(使用ubuntu下面有不少需要root权限,请注意) 代码如下:
添加MySQL系统用户 # groupadd mysql# useradd -r -g mysql mysql 提前建立好相关目录 # mkdir /data/logs/mysql# mkdir /data/mysql 下载MySQL源代码: # wget http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.12.tar.gz 配置 # cmake / -DCMAKE_INSTALL_PREFIX=/usr/local/server/mysql-5.6.12 /-DMYSQL_DATADIR=/data/mysql /-DMYSQL_UNIX_ADDR=/tmp/mysql.sock /-DMYSQL_USER=mysql /-DDEFAULT_CHARSET=utf8 /-DEFAULT_COLLATION=utf8_general_ci /-DWITH_INNOBASE_STORAGE_ENGINE=1 /-DENABLE_DOWNLOADS=1 配置释义: -DCMAKE_INSTALL_PREFIX=/usr/local/server/mysql-5.6.12 设置安装目录 更多参数执行 # cmake . -LH 或者查看官方说明 Note: 执行过程中会出现: CMake Error: Problem with tar_extract_all(): Invalid argumentCMake Error: Problem extracting tar: /usr/local/src/mysql-5.6.12/source_downloads/gmock-1.6.0.zip 解决方法: 编译安装 # make && make install 建立链接文件,方便以后使用和升级: # ln -s /usr/local/server/mysql-5.6.12 /usr/local/server/mysql 设置权限: # chown -R mysql:mysql /usr/local/server/mysql# chown -R mysql:mysql /usr/local/server/mysql-5.6.12# chown -R mysql:mysql /data/mysql# chown -R mysql:mysql /data/logs/mysql 初始化数据库 代码如下: # /usr/local/server/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql --basedir=/usr/local/server/mysql --collation-server=utf8_general_ci 这时候会出现以下警告,下面配置my.cnf会解决这个问题 详情请查看 MySQL 5.6 中 TIMESTAMP 的变化 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). # cp /usr/local/server/mysql/support-files/mysql.server /etc/init.d/mysql 修改安装目录下my.cnf,部分参数需要结合实际情况进行修改 [mysqld] datadir = /data/mysqlsocket = /tmp/mysql.sockpid-file = /data/logs/mysql/mysql.piduser = mysqlport = 3306default_storage_engine = InnoDB # InnoDB#innodb_buffer_pool_size = 128M#innodb_log_file_size = 48Minnodb_file_per_table = 1innodb_flush_method = O_DIRECT # MyISAM#key_buffer_size = 48M # character-setcharacter-set-server=utf8collation-server=utf8_general_ci # name-resolveskip-host-cacheskip-name-resolve # LOGlog_error = /data/logs/mysql/mysql-error.loglong_query_time = 1slow-query-logslow_query_log_file = /data/logs/mysql/mysql-slow.log # Othersexplicit_defaults_for_timestamp=true#max_connections = 500open_files_limit = 65535sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [client]socket = /tmp/mysql.sockport = 3306Note: 被注释掉的部分语句,需要结合业务和硬件资源进行修改,所以先占位,使用默认值即可。my.cnf文件中不能出现拼写错误,否则,接下来启动会出现很多意想不到的错误,如果出现无法启动请参看:mysql-error.log文件。权限设置不当也会导致启动失败。 启动前,再次确认一遍权限: 很有可能现在my.cnf的权限不是mysql,同时检查一下/etc/my.cnf是否存在,如果存在则删除!!! # chown -R mysql:mysql /usr/local/server/mysql-5.6.12 启动mysql: # service mysql start 添加环境变量 #echo 'export PATH=$PATH:/usr/local/server/mysql/bin'>> /etc/profile 安全设置(设定初始密码,移除匿名用户,移除测试数据库): # /usr/local/server/mysql/bin/mysql_secure_installation 添加开机启动 CentOS: # chkconfig mysql on Ubuntu: # sudo update-rc.d mysql defaults 配置须知: MySQL有大量可以修改的配置选项,通常只需要把基本的项配置正确,应该将更多的时间花在schema的优化、索引上,以及查询设计上。正确地配置MySQL的基本配置项后,再花力气去修改其他配置选项的收益通常就比较小了。 socket = /tmp/mysql.sockpid_file = /data/logs/mysql/mysql.pid socket和pid_file 文件如果不指定位置,放在默认编译位置,在不同的MySQL版本里可能会导致一些错误 default_storage_engine = InnoDB 设定默认存储引擎,创建表的时候最好显式进行存储引擎的配置 innodb_buffer_pool_size = 2Ginnodb_log_file_size = 128Minnodb_file_per_table = 1innodb_flush_method = 0_DIRECT InnoDB最重要的两个选项为缓冲池大小 如果大部分表都是InnoDB表,InnoDB缓冲池的设置或许比其他任何东西都需要内存。InnoDB并不仅仅缓存索引:它还会缓存数据、自适应哈系索引、插入缓冲(Insert Buffer)、锁,以及其他内部数据结构。InnoDB还使用缓冲池来帮助延迟写入,合并多个写入操作,一起顺序写回。总之,InnoDB严重依赖缓冲池,必须分配足够内存。 Note: InnoDB使用日志来减少事务提交的开销。因为日志已经记录了事务,就无须在每个事务提交时把缓冲池的胀快刷新到磁盘中。InnoDB用日志把随机I/O变成顺序I/O。一旦日志安全写到磁盘,事务就持久化了。如果断电,InnoDB可以重放日志并且恢复已经提交的事务。 缓冲池大小设置方法: Note:设置不需要很精确,而且宁可谨慎,而不要设置过大,如果设置少了20%可能只产生很小的影响,但是如果大了20%则可能造成很严重的问题:内存交换、磁盘抖动、内存耗尽和死机。 #MyISAMkey_buffer_size = 128M MyISAM自身只缓存索引,不缓存数据(依赖操作系统缓存数据)。如果大部分为MyISAM表,就应该分配较大key_buffer_size。 SELECT SUM( INDEX_LENGTH) FROM INFORMATION_SCHEMA.TABLESWHERE ENGINE='MYISAM'; 使用的UNIX系统,则使用以下命令 # du -sch `find /mysqldatadir -name “*.MYI”` 键缓存需要存储多大的值? 缓冲区使用率计算,通过SHOW STATUS和SHOW VARIABLES命令查看以下变量: 100 - ( ( Key_blocks_unused * key_cache_block_size) * 100 / key_buffer_size ) 如果服务器运行很长一段时间之后,还是没有使用完所有缓冲键,就可以把缓冲键调小一点。 键缓冲命中率 Key_reads / Uptime 设定默认字符集和编码 # character-set-servercharacter-set-server=utf8collation-server=utf8_general_ci 以下选项设定仅使用IP来链接MySQL服务器,省略了DNS查询时间 # name-resolveskip-name-resolveskip-host-cache 设定错误日志和慢查询日志。大于1s的为慢查询 # LOGlog_error = /data/logs/mysql/mysql-error.loglong_query_time = 1slow_query_logslow_query_log_file = /data/logs/mysql/mysql-slow.log# Others#timestamp默认设置,5.6.6后不设置会报错explicit_defaults_for_timestamp=true 设定同时处理的最大链接,保证应用激增产生而不堪重负,当查询不能执行,那打开一个链接没有任何好处,所以被“太多链接”的错误拒绝是一个快速而代价下的失败方式。具体设定需要参考预想的最大并发数和本机配置。 max_connections = 500 table_open_cache was known as table_cache in MySQL 5.1.2 and earlier. table_open_cache = 5000 如果在段时间内不断有错误链接,比如:权限错误,应用配置出错等。客户端达到max_connect_errors设定次数,就会被加入黑名单,无法连接,直到再次刷新主机缓存。(如何操作?)可以有效防止暴力破解密码。 max_connect_errors = 2000 在典型的Linux系统上我们把open_files_limit设置的尽可能大。现代操作系统中打开文件句柄开销都较小。如果这个参数设置不够大,会出现经典的24号错误:”too many open files”。 open_files_limit = 65535 |