Maison base de données tutoriel mysql Linux系统下自行编译安装MySQL及基础配置全过程解析_MySQL

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

May 27, 2016 pm 01:45 PM
linux mysql

安装依赖:

CentOS:

1

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

Copier après la connexion

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

代码如下:


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

添加MySQL系统用户

1

2

# groupadd mysql

# useradd -r -g mysql mysql

Copier après la connexion

提前建立好相关目录

1

2

# mkdir /data/logs/mysql

# mkdir /data/mysql

Copier après la connexion

下载MySQL源代码:

1

# wget http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.12.tar.gz

Copier après la connexion

配置

1

# cmake \

Copier après la connexion

1

2

3

4

5

6

7

8

-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

Copier après la connexion

配置释义:

-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:

执行过程中会出现:

1

2

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

Copier après la connexion

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

编译安装

1

# make && make install

Copier après la connexion

建立链接文件,方便以后使用和升级:

1

# ln -s /usr/local/server/mysql-5.6.12 /usr/local/server/mysql

Copier après la connexion

设置权限:

1

2

3

4

# 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

Copier après la connexion

初始化数据库

代码如下:

# /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).
配置启动项目:

1

# cp /usr/local/server/mysql/support-files/mysql.server /etc/init.d/mysql

Copier après la connexion

修改安装目录下my.cnf,部分参数需要结合实际情况进行修改

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

[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:

Copier après la connexion

被注释掉的部分语句,需要结合业务和硬件资源进行修改,所以先占位,使用默认值即可。my.cnf文件中不能出现拼写错误,否则,接下来启动会出现很多意想不到的错误,如果出现无法启动请参看:mysql-error.log文件。权限设置不当也会导致启动失败。

启动前,再次确认一遍权限:

很有可能现在my.cnf的权限不是mysql,同时检查一下/etc/my.cnf是否存在,如果存在则删除!!!

1

# chown -R mysql:mysql /usr/local/server/mysql-5.6.12

Copier après la connexion

启动mysql:

1

# service mysql start

Copier après la connexion

添加环境变量

1

#echo 'export PATH=$PATH:/usr/local/server/mysql/bin'>> /etc/profile

Copier après la connexion

安全设置(设定初始密码,移除匿名用户,移除测试数据库):

1

# /usr/local/server/mysql/bin/mysql_secure_installation

Copier après la connexion

添加开机启动

CentOS:

1

# chkconfig mysql on

Copier après la connexion

Ubuntu:

1

# sudo update-rc.d mysql defaults

Copier après la connexion

配置须知:

MySQL有大量可以修改的配置选项,通常只需要把基本的项配置正确,应该将更多的时间花在schema的优化、索引上,以及查询设计上。正确地配置MySQL的基本配置项后,再花力气去修改其他配置选项的收益通常就比较小了。
过度优化的服务器导致的潜在风险很大,容易频繁崩溃、运行缓慢。
MySQL大多数默认配置选项已经是最佳配置了,所以最好不要做太多的改动,上文设置的参数对于大多数人已经够多了。
没有一劳永逸的配置,随着数据库内数据、用户数量的变化,过一段时间后,可以有选择地调整数据库的配置。
基本配置选项详解:

1

2

socket = /tmp/mysql.sock

pid_file = /data/logs/mysql/mysql.pid

Copier après la connexion

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

1

default_storage_engine = InnoDB

Copier après la connexion

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

1

2

3

4

innodb_buffer_pool_size = 2G

innodb_log_file_size = 128M

innodb_file_per_table = 1

innodb_flush_method = 0_DIRECT

Copier après la connexion

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%则可能造成很严重的问题:内存交换、磁盘抖动、内存耗尽和死机。

1

2

#MyISAM

key_buffer_size = 128M

Copier après la connexion

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

1

2

SELECT SUM( INDEX_LENGTH) FROM INFORMATION_SCHEMA.TABLES

WHERE ENGINE='MYISAM';

Copier après la connexion

使用的UNIX系统,则使用以下命令

1

# du -sch `find /mysqldatadir -name “*.MYI”`

Copier après la connexion

键缓存需要存储多大的值?
不要超过索引总大小,也不要超过为操作系统缓存保留的总大小。取两者较小值。

缓冲区使用率计算,通过SHOW STATUS和SHOW VARIABLES命令查看以下变量:

1

100 - ( ( Key_blocks_unused * key_cache_block_size) * 100 / key_buffer_size )

Copier après la connexion

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

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

1

Key_reads / Uptime

Copier après la connexion

设定默认字符集和编码

1

2

3

# character-set-server

character-set-server=utf8

collation-server=utf8_general_ci

Copier après la connexion

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

1

2

3

# name-resolve

skip-name-resolve

skip-host-cache

Copier après la connexion

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

1

2

3

4

5

6

7

8

9

# 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

Copier après la connexion

设定同时处理的最大链接,保证应用激增产生而不堪重负,当查询不能执行,那打开一个链接没有任何好处,所以被“太多链接”的错误拒绝是一个快速而代价下的失败方式。具体设定需要参考预想的最大并发数和本机配置。

1

max_connections = 500

Copier après la connexion

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.

1

table_open_cache = 5000

Copier après la connexion

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

1

max_connect_errors = 2000

Copier après la connexion

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

1

open_files_limit = 65535

Copier après la connexion

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Place de MySQL: bases de données et programmation Place de MySQL: bases de données et programmation Apr 13, 2025 am 12:18 AM

La position de MySQL dans les bases de données et la programmation est très importante. Il s'agit d'un système de gestion de base de données relationnel open source qui est largement utilisé dans divers scénarios d'application. 1) MySQL fournit des fonctions efficaces de stockage de données, d'organisation et de récupération, en prenant en charge les systèmes Web, mobiles et de niveau d'entreprise. 2) Il utilise une architecture client-serveur, prend en charge plusieurs moteurs de stockage et optimisation d'index. 3) Les usages de base incluent la création de tables et l'insertion de données, et les usages avancés impliquent des jointures multiples et des requêtes complexes. 4) Des questions fréquemment posées telles que les erreurs de syntaxe SQL et les problèmes de performances peuvent être déboguées via la commande Explication et le journal de requête lente. 5) Les méthodes d'optimisation des performances comprennent l'utilisation rationnelle des indices, la requête optimisée et l'utilisation des caches. Les meilleures pratiques incluent l'utilisation des transactions et des acteurs préparés

Que faire si le port Apache80 est occupé Que faire si le port Apache80 est occupé Apr 13, 2025 pm 01:24 PM

Lorsque le port Apache 80 est occupé, la solution est la suivante: découvrez le processus qui occupe le port et fermez-le. Vérifiez les paramètres du pare-feu pour vous assurer qu'Apache n'est pas bloqué. Si la méthode ci-dessus ne fonctionne pas, veuillez reconfigurer Apache pour utiliser un port différent. Redémarrez le service Apache.

Comment démarrer Apache Comment démarrer Apache Apr 13, 2025 pm 01:06 PM

Les étapes pour démarrer Apache sont les suivantes: Installez Apache (Commande: Sudo apt-get install Apache2 ou téléchargez-le à partir du site officiel) Start Apache (Linux: Sudo SystemCTL Démarrer Apache2; Windows: Cliquez avec le bouton droit sur le service "APACHE2.4" et SELECT ") Vérifiez si elle a été lancée (Linux: SUDO SYSTEMCTL STATURE APACHE2; (Facultatif, Linux: Sudo SystemCTL

Comment se connecter à la base de données d'Apache Comment se connecter à la base de données d'Apache Apr 13, 2025 pm 01:03 PM

Apache se connecte à une base de données nécessite les étapes suivantes: Installez le pilote de base de données. Configurez le fichier web.xml pour créer un pool de connexion. Créez une source de données JDBC et spécifiez les paramètres de connexion. Utilisez l'API JDBC pour accéder à la base de données à partir du code Java, y compris l'obtention de connexions, la création d'instructions, les paramètres de liaison, l'exécution de requêtes ou de mises à jour et de traitement des résultats.

Comment optimiser les performances de Debian Readdir Comment optimiser les performances de Debian Readdir Apr 13, 2025 am 08:48 AM

Dans Debian Systems, les appels du système ReadDir sont utilisés pour lire le contenu des répertoires. Si ses performances ne sont pas bonnes, essayez la stratégie d'optimisation suivante: simplifiez le nombre de fichiers d'annuaire: divisez les grands répertoires en plusieurs petits répertoires autant que possible, en réduisant le nombre d'éléments traités par appel ReadDir. Activer la mise en cache de contenu du répertoire: construire un mécanisme de cache, mettre à jour le cache régulièrement ou lorsque le contenu du répertoire change et réduire les appels fréquents à Readdir. Les caches de mémoire (telles que Memcached ou Redis) ou les caches locales (telles que les fichiers ou les bases de données) peuvent être prises en compte. Adoptez une structure de données efficace: si vous implémentez vous-même la traversée du répertoire, sélectionnez des structures de données plus efficaces (telles que les tables de hachage au lieu de la recherche linéaire) pour stocker et accéder aux informations du répertoire

L'importance de Debian Sniffer dans la surveillance du réseau L'importance de Debian Sniffer dans la surveillance du réseau Apr 12, 2025 pm 11:03 PM

Bien que les résultats de la recherche ne mentionnent pas directement "Debiansniffer" et son application spécifique dans la surveillance du réseau, nous pouvons en déduire que "Sniffer" se réfère à un outil d'analyse de capture de paquets de réseau, et son application dans le système Debian n'est pas essentiellement différente des autres distributions Linux. La surveillance du réseau est cruciale pour maintenir la stabilité du réseau et l'optimisation des performances, et les outils d'analyse de capture de paquets jouent un rôle clé. Ce qui suit explique le rôle important des outils de surveillance du réseau (tels que Sniffer Running dans Debian Systems): La valeur des outils de surveillance du réseau: Faute-défaut Emplacement: surveillance en temps réel des métriques du réseau, telles que l'utilisation de la bande passante, la latence, le taux de perte de paquets, etc.

Comment apprendre Debian Syslog Comment apprendre Debian Syslog Apr 13, 2025 am 11:51 AM

Ce guide vous guidera pour apprendre à utiliser Syslog dans Debian Systems. Syslog est un service clé dans les systèmes Linux pour les messages du système de journalisation et du journal d'application. Il aide les administrateurs à surveiller et à analyser l'activité du système pour identifier et résoudre rapidement les problèmes. 1. Connaissance de base de Syslog Les fonctions principales de Syslog comprennent: la collecte et la gestion des messages journaux de manière centralisée; Prise en charge de plusieurs formats de sortie de journal et des emplacements cibles (tels que les fichiers ou les réseaux); Fournir des fonctions de visualisation et de filtrage des journaux en temps réel. 2. Installer et configurer syslog (en utilisant RSYSLOG) Le système Debian utilise RSYSLOG par défaut. Vous pouvez l'installer avec la commande suivante: SudoaptupDatesud

Comment redémarrer le serveur Apache Comment redémarrer le serveur Apache Apr 13, 2025 pm 01:12 PM

Pour redémarrer le serveur Apache, suivez ces étapes: Linux / MacOS: Exécutez Sudo SystemCTL Restart Apache2. Windows: Exécutez net stop apache2.4 puis net start apache2.4. Exécuter netstat -a | Findstr 80 pour vérifier l'état du serveur.

See all articles