Linux系统下自行编译安装MySQL及基础配置全过程解析

安装依赖:

CentOS:

# yum -y install wget gcc-c++ cmake make bison ncurses-devel perl unzip

Ubuntu:(使用ubuntu下面有不少需要root权限,请注意)

代码如下:

# sudo apt-get install -y g++ gcc make libpcre3 zlib1g libbz2-dev automake cmake perl libncurses5-dev bison

添加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 设置安装目录
-DMYSQL_DATADIR=/data/mysql 设置数据库存放目录
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock 设置UNIX socket 目录
-DMYSQL_USER=mysql 设置运行用户
-DDEFAULT_CHARSET=utf8 设置默认字符集,默认latin1
-DEFAULT_COLLATION=utf8_general_ci 设置默认校对规则,默认latin1_general_ci
-DWITH_INNOBASE_STORAGE_ENGINE=1 添加InnoDB引擎支持
-DENABLE_DOWNLOADS=1 自动下载可选文件,比如自动下载谷歌的测试包
-DMYSQL_TCP_PORT=3306 设置服务器监听端口,默认3306
-DSYSCONFDIR=/data/etc 设置my.cnf所在目录,默认为安装目录

更多参数执行 # cmake . -LH 或者查看官方说明

Note:

执行过程中会出现:

CMake Error: Problem with tar_extract_all(): Invalid argument
CMake Error: Problem extracting tar: /usr/local/src/mysql-5.6.12/source_downloads/gmock-1.6.0.zip

解决方法:
cd mysql目录下面会发现有一个source_downloads目录,需要解压unzip gmock-1.6.0.zip,然后再重新执行上述配置过程。当然你也可以去掉-DENABLE_DOWNLOADS=1这个选项,不编译谷歌的测试包也没有什么问题,但是之前的某些版本会出现无法编译的问题。

编译安装

# 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/mysql
socket = /tmp/mysql.sock
pid-file = /data/logs/mysql/mysql.pid
user = mysql
port = 3306
default_storage_engine = InnoDB

# InnoDB
#innodb_buffer_pool_size = 128M
#innodb_log_file_size = 48M
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT

# MyISAM
#key_buffer_size = 48M

# character-set
character-set-server=utf8
collation-server=utf8_general_ci

# name-resolve
skip-host-cache
skip-name-resolve

# LOG
log_error = /data/logs/mysql/mysql-error.log
long_query_time = 1
slow-query-log
slow_query_log_file = /data/logs/mysql/mysql-slow.log

# Others
explicit_defaults_for_timestamp=true
#max_connections = 500
open_files_limit = 65535
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

[client]
socket = /tmp/mysql.sock
port = 3306
Note:

被注释掉的部分语句,需要结合业务和硬件资源进行修改,所以先占位,使用默认值即可。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的基本配置项后,再花力气去修改其他配置选项的收益通常就比较小了。
过度优化的服务器导致的潜在风险很大,容易频繁崩溃、运行缓慢。
MySQL大多数默认配置选项已经是最佳配置了,所以最好不要做太多的改动,上文设置的参数对于大多数人已经够多了。
没有一劳永逸的配置,随着数据库内数据、用户数量的变化,过一段时间后,可以有选择地调整数据库的配置。
基本配置选项详解:

socket = /tmp/mysql.sock
pid_file = /data/logs/mysql/mysql.pid

socket和pid_file 文件如果不指定位置,放在默认编译位置,在不同的MySQL版本里可能会导致一些错误

default_storage_engine = InnoDB

设定默认存储引擎,创建表的时候最好显式进行存储引擎的配置

innodb_buffer_pool_size = 2G
innodb_log_file_size = 128M
innodb_file_per_table = 1
innodb_flush_method = 0_DIRECT

InnoDB最重要的两个选项为缓冲池大小
innodb_buffer_pool_size和 日志文件大小innodb_log_file_size,默认值一般都太小。

如果大部分表都是InnoDB表,InnoDB缓冲池的设置或许比其他任何东西都需要内存。InnoDB并不仅仅缓存索引:它还会缓存数据、自适应哈系索引、插入缓冲(Insert Buffer)、锁,以及其他内部数据结构。InnoDB还使用缓冲池来帮助延迟写入,合并多个写入操作,一起顺序写回。总之,InnoDB严重依赖缓冲池,必须分配足够内存。

Note:
缓冲池越大,预热和关闭都需要很长时间。

InnoDB使用日志来减少事务提交的开销。因为日志已经记录了事务,就无须在每个事务提交时把缓冲池的胀快刷新到磁盘中。InnoDB用日志把随机I/O变成顺序I/O。一旦日志安全写到磁盘,事务就持久化了。如果断电,InnoDB可以重放日志并且恢复已经提交的事务。
整体日志大小受控于innodb_log_file_size和innodb_log_file_in_group两个参数之乘积。一般需要设置几百MB甚至上GB。作为经验法则,一般日志文件全部大小,应该足够容纳服务器一小时的活动内容。

缓冲池大小设置方法:
从服务器总内存开始
减去操作系统占用内存和其他服务占用内存(如果还有其他服务的话)
减去MySQL自身需要内存,例如为每个查询操作分配一些缓冲。
减去足够让操作系统缓存InnoDB日志文件的内存,至少是足够缓存最近经常访问的部分。再减去一些可以缓存二进制日志的最后一部分,以防止复制产生了延迟,备库可能读取主库上旧的二进制日志文件,给主库内存造成压力。
减去其他MySQL缓冲和缓存需要的内存,如MyISAM键缓存(key_buffer_size),或者查询缓存(query cache)
处以105%,向下取舍一个合理值。

Note:设置不需要很精确,而且宁可谨慎,而不要设置过大,如果设置少了20%可能只产生很小的影响,但是如果大了20%则可能造成很严重的问题:内存交换、磁盘抖动、内存耗尽和死机。

#MyISAM
key_buffer_size = 128M

MyISAM自身只缓存索引,不缓存数据(依赖操作系统缓存数据)。如果大部分为MyISAM表,就应该分配较大key_buffer_size。
再分配多大内存前,首先了解一下,MyISAM占用了多大的空间,肯定不需要分配比需要缓存的索引数据还大的内存(有时候为数据量扩增预留一些,会设置比较大)。
有两个方法计算索引大小:
使用SQL语句,查询INFORMATION——SCHEMA表的INDEX_LENGTH字段,把他们相加即可。

SELECT SUM( INDEX_LENGTH) FROM INFORMATION_SCHEMA.TABLES
WHERE 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 )

如果服务器运行很长一段时间之后,还是没有使用完所有缓冲键,就可以把缓冲键调小一点。

键缓冲命中率
从经验上来讲,每秒未命中次数更有用,假定一个磁盘每秒可以产生100个随机读,每秒5次缓存未命中则不会导致I/O繁忙,每秒80次则可能导致I/O繁忙。计算公式:

Key_reads / Uptime

设定默认字符集和编码

# character-set-server
character-set-server=utf8
collation-server=utf8_general_ci

以下选项设定仅使用IP来链接MySQL服务器,省略了DNS查询时间
阅读材料:http://dev.mysql.com/doc/refman/5.6/en/host-cache.html

# name-resolve
skip-name-resolve
skip-host-cache

设定错误日志和慢查询日志。大于1s的为慢查询

# LOG
log_error = /data/logs/mysql/mysql-error.log
long_query_time = 1
slow_query_log
slow_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应该设置足够大,避免总是重新打开和解析表定义。如果Open_tables的值每秒变化很大,那么table_open_cache可能设置偏小。这个值从max_connections的10倍开始设置比较好,但是,大部分情况下不要超过10000.

table_open_cache = 5000

如果在段时间内不断有错误链接,比如:权限错误,应用配置出错等。客户端达到max_connect_errors设定次数,就会被加入黑名单,无法连接,直到再次刷新主机缓存。(如何操作?)可以有效防止暴力破解密码。

max_connect_errors = 2000

在典型的Linux系统上我们把open_files_limit设置的尽可能大。现代操作系统中打开文件句柄开销都较小。如果这个参数设置不够大,会出现经典的24号错误:”too many open files”。

open_files_limit = 65535
(0)

相关推荐

  • windows和linux安装mysql后启用日志管理功能的方法

    查看是否启用了日志 复制代码 代码如下: mysql>show variables like 'log_bin'; 怎样知道当前的日志 复制代码 代码如下: mysql> show master status; 展示二进制日志数目 复制代码 代码如下: mysql> show master logs; 看二进制日志文件用mysqlbinlog 复制代码 代码如下: shell>mysqlbinlog mail-bin.000001 或者 复制代码 代码如下: shell>my

  • Linux下安装Mysql多实例作为数据备份服务器实现多主到一从多实例的备份

    1.从MYSQL官方下载MYSQL的源码版本[一定要是源码版本] 2.按以下代码键入LINUX命令行 复制代码 代码如下: [注] 添加mysql组和用户 #groupadd mysql #useradd -g mysql mysql [注] 解包到/usr/local # tar -xzf mysql-standard-4.1.9-pc-linux-gnu-i686.tar.gz -C /usr/local [注] 建立软链接,方便操作(此处给此连接命名为mysql001,也可为其它的名字)

  • linux安装mysql和使用c语言操作数据库的方法 c语言连接mysql

    1. MySQL的安装与配置: 在Ubuntu下安装MySQL方法很简单,使用如下命令: 复制代码 代码如下: sudo apt-get install mysql-server 安装的过程中系统会提示设置root密码,此过程可以跳过,但是建议在安装时提示设置root密码的时候自行设置,免得后面设置麻烦.安装结束之后,系统会启动mysql服务,可以使用命令去查看来验证mysql服务是否已经安装成功: 复制代码 代码如下: ps -el | grep mysql 如果mysql服务没有正常的运行,

  • Linux下安装mysql-5.6.4 的图文教程

    在开始安装前,先说明一下mysql-5.6.4与较低的版本在安装上的区别,从mysql-5.5起,mysql源码安装开始使用cmake了,因此当我们配置安装目录./configure --perfix=/.....的时候和以前的会有些区别,这点我们稍后会提到. 一:解压缩mysql-5.6.4-m7-tar.zip 1>  unzip mysql-5.6.4-m7-tar.zip   会生成mysql-5.6.4-m7-tar.gz的压缩文件 2> tar -zxvf mysql-5.6.4-

  • SUSE Linux下源码编译方式安装MySQL 5.6过程分享

    MySQL为开源数据库,因此可以基于源码实现安装.基于源码安装有更多的灵活性.也就是说我们可以针对自己的硬件平台选用合适的编译器来优化编译后的二进制代码,根据不同的软件平台环境调整相关的编译参数,选择自身需要选择不同的安装组件,设定需要的字符集等等一些可以根据特定应用场景所作的各种调整.本文描述了如何在源码方式下安装MySQL. 1.安装环境及介质 复制代码 代码如下: #安装环境 SZDB:~ # cat /etc/issue Welcome to SUSE Linux Enterprise

  • Linux下编译安装Mysql 5.5的简单步骤

    首先是安装cmake环境.因为博主测试机是ubuntu,所以直接用apt-get install cmake命令来安装,yum相信应该也一样.或者可以编译安装,步骤如下. 复制代码 代码如下: wget http://www.cmake.org/files/v2.8/cmake-2.8.12.2.tar.gz tarx zvfc cmake-2.8.12.2.tar.gz cd cmake-2.8.12.2  ./configure make && make install 安装完成后执行

  • Linux下编译安装MySQL-Python教程

    1.下载mysql-python 官网地址:http://sourceforge.net/projects/mysql-python/ 2.安装mysql-python 复制代码 代码如下: # tar -zxvf MySQL-python-1.2.3.tar.gz # cd MySQL-python-1.2.3 # whereis mysql_config mysql_config: /usr/bin/mysql_config /usr/share/man/man1/mysql_config.

  • 在Linux系统安装Mysql教程

    引言 现在因为项目的需要在搭建Mysql的集群,从最简单的开始,先安装一个Mysql 在linux系统下. 步骤: 第一步:安装: tarmysql-5.5.48-linux2.-x86_64.tar.gz Copy到指定的路径下: cpmysql-5.5.48-linux2.6-x86_64 /usr/local/mysql -r 添加系统mysql组合mysql用户: 执行命令:groupaddmysql和useradd -r -g mysql mysql 安装数据库: 进入安装mysql软

  • Linux系统下自行编译安装MySQL及基础配置全过程解析

    安装依赖: CentOS: # yum -y install wget gcc-c++ cmake make bison ncurses-devel perl unzip Ubuntu:(使用ubuntu下面有不少需要root权限,请注意) 复制代码 代码如下: # sudo apt-get install -y g++ gcc make libpcre3 zlib1g libbz2-dev automake cmake perl libncurses5-dev bison 添加MySQL系统用

  • Linux下二进制编译安装MySql centos7的教程

    // 当时我装这个也是折腾了一下午 , 所以写一个笔记记录一下; //如果哪里有问题的话我们可以一起讨论( qq: 2970911340,邮箱+@qq.com),这也是我第一次写博客 练练手 1. 安cmake工具 # yum install -y cmake 2. 创建mysql用户 #useradd -s /sbin/nologin mysql  //设置为非登陆用户(安全) 3. 创建数据目录,该目录是用于数据库初始化时生成的库.表.日志等,不要直接在该目录下存放东西 # mkdir -p

  • Linux系统下为Nginx安装多版本PHP

    我们在安装配置服务器LNPM环境时应该考虑到PHP多版本并存的问题,下面是实现Linux系统下为Nginx安装多版本PHP的实现方法 linux版本:64位CentOS 6.4 Nginx版本:nginx1.8.0 php版本:php5.5.28 & php5.4.44 注意假如php5.5是主版本已经安装在/usr/local/php目录下,那么再安装其他版本的php再指定不同安装目录即可. 安装PHP # wget http://cn2.php.net/get/php-5.4.44.tar.

  • linux系统下vim插件安装介绍

    目录 安装vim插件管理器 添加插件演示 删除插件: 安装vim插件管理器 第一次使用插件推荐安装插件管理器,它可以简化我们安装插件的步骤. 1.下载 plug.vim 文件,根据操作系统不同,放置在以下autoload目录中: Linux: ~/.vim/autoload Windows: ~\vimfiles\autoload\plug.vim plug.vim地址:https://raw.githubusercontent.com/junegunn/vim-plug/master/plug

  • MySQL入门完全指南及Linux系统下基本的安装教程

    我们来了解一下MySQL的基本特性: 1.内部构件和可移植性 使用C和C++编写 用众多不同的编译器进行了测试 能够工作在众多不同的平台上.请参见2.1.1 "MySQL支持的操作系统". 使用GNU Automake.Autoconf和Libtool进行移植. 提供了用于C.C++.Eiffel.Java.Perl.PHP.Python.Ruby和Tcl的API. 采用核心线程的完全多线程 如果有多个CPU,它能方便地使用这些CPU. 提供了事务性和非事务性存储引擎. 使用了极快的&

  • Linux系统下实现远程连接MySQL数据库的方法教程

    前言 最近在工作中遇到了这个需求,估计搞了一个多小时才把这个远程连接搞好.一台本地电脑,一台云服务器,都是linux系统.下面来看看详细的介绍: 步骤 1.在服务器端开启远程访问 首先进入mysql数据库,然后输入下面两个命令: grant all privileges on *.* to 'root'@'%' identified by 'password'; flush privileges; 第一个*是数据库,可以改成允许访问的数据库名称 第二个 是数据库的表名称,代表允许访问任意的表 r

  • linux系统下oracle11gR2静默安装的经验分享

    前言: 1.我的linux是64位的redhat6.5,安装的oracle版本是11.2.0的. 2.我这是自己安装的linux虚拟机,主机名为ora11g,ip为192.168.100.122 3.这台机器以前没有安装过oracle数据库,这是第一次安装:系统安装好了之后,仅仅只配了ip地址:所以新手完全可以按照我的步骤装一次oracle. 准备工作: 1.确认主机名一致: [root@ora11g ~]# vi /etc/hosts 在末尾添加   (#其中192.168.100.123为本

  • Linux系统下virtuoso数据库安装与使用详解

    最近在调研关联数据的一些东西,需要用到rdf数据库,所以接触了virtuoso数据库.安装的坑其实并不多,之前在windows 10上安过一次.这次在ubuntu 18.04上安装一下,其他的linux发行版安装的流程也差不多. virtuoso数据库的下载与使用 开源版本的virtuoso数据库可以在sourceforge下载.我用的是7.25版本.建议下载已经编译好的generic版本(下载图中标红色的那个),需要编译的那个版本我遇到了openssl版本不支持的问题. 下载完毕后将其解压到/

  • Linux系统下PHP-FPM的安装和配置教程

    基本安装方法 安装工具包 $ sudo apt-get install python-software-properties 添加ppa源 $ sudo add-apt-repository ppa:yola/php5 安装php5-fpm sudo apt-get update sudo apt-get install php5-fpm 其它必要的软件安装接 sudo apt-get install nginx 配置php-fpm php-fpm的解析器是C/S结构,它的配置文件位于: (1)

  • 讲解Linux系统下如何自动备份MySQL数据的基本教程

    1.先创建一个数据库备份目录: mkdir backup cd backup mkdir mysqlbackup cd mysqlbackup 2.创建备份脚本 vi mysqlautobackup 3.编写脚本: filename=`date +%Y%m%d` /mysql的bin目录/mysqldump --opt 数据库名 -u(mysql账号) -p(mysql密码) | gzip > /备份到哪个目录/name$filename.gz 说明:以上采用gzip压缩,name可随意写,注意

随机推荐