源代码安装 MySQL 5.6.28
2016-02-03 12:12
453 查看
本文内容
创建 MySQL 用户和组解压 MySQL 源代码包
生成配置安装文件
编译和安装
MySQL 配置文件
创建 MySQL 授权表
MySQL 目录授权
启动 MySQL
验证 MySQL 安装
设置 MySQL 访问权限
MySQL 开机自动启动
设置环境变量
参考资料
最近做项目,之前我是用 Oracle 的,如果在 Windows 环境,无论是安装,还是配置,都很容易;Linux 环境没试过,刚毕业时的那个公司,是 Linux 环境。一般等到开发的时候,数据库早按完了,这活轮不到开发干。现在,跳槽后,公司用 MySQL~遇到两个问题:
1,对一个包含二进制字段的表,开发环境和测试环境的性能差异巨大,都是虚拟机。开发环境,Windows 平台,执行 INSERT 很快,几毫秒的事;而测试环境,Linux 平台,执行 INSERT 慢到有点说不过去了,几十毫秒,差距将近 30 倍。如果是 Oracle,前期的话,即便什么不做,也很快;
网上有些人告诉我,应该查看一下机器的负载,比如,磁盘、IO 等,我倒是想,也不是产品环境,不至于差异这么大吧,并且一直就没快过~
2,产品环境,70W 数据,执行 SELECT * FROM T1 WHERE FLAG=0 ORDER BY ID ASC,如果不为 FLAG 字段建索引,执行时间都快 1 秒啦。这要是在 Oracle 上,绝对不可能发生~
这促使我自己在 Linux 上安装 MySQL 源代码。没事时,练习、研究一下~
用源代码方式安装的好处是,编译时,可以针对自己的硬件环境。只是安装相比 RPM 要麻烦点,不过“会者不难,难者不会”,多练练就好了~1,对一个包含二进制字段的表,开发环境和测试环境的性能差异巨大,都是虚拟机。开发环境,Windows 平台,执行 INSERT 很快,几毫秒的事;而测试环境,Linux 平台,执行 INSERT 慢到有点说不过去了,几十毫秒,差距将近 30 倍。如果是 Oracle,前期的话,即便什么不做,也很快;
网上有些人告诉我,应该查看一下机器的负载,比如,磁盘、IO 等,我倒是想,也不是产品环境,不至于差异这么大吧,并且一直就没快过~
2,产品环境,70W 数据,执行 SELECT * FROM T1 WHERE FLAG=0 ORDER BY ID ASC,如果不为 FLAG 字段建索引,执行时间都快 1 秒啦。这要是在 Oracle 上,绝对不可能发生~
这促使我自己在 Linux 上安装 MySQL 源代码。没事时,练习、研究一下~
期间,最开始用的是 RPM 包,挺容易,尝试了 Percona 和社区版,最后,又用源代码安装了一遍~
本文是以 MySQL 源代码方式进行安装。参考众多资料,折腾好几天,总算安上了~如果安装时,缺少必要的包,就用 yum 安装,比如 cmake、perl 等~
创建 MySQL 用户和组
这步的目的,是执行 mysql_install_db 创建 MySQL 授权表,以及启动 MySQL 时,都需要指定用户名。所以,它是第一步。第一步:为以后的 MySQL 服务 mysqld 增加一个登录的用户和组,用户名和组名均为“mysql”。如果用了其他名称,在后面的操作中也要替换。
[code][root@vcyber usr]# groupadd mysql
[root@vcyber usr]# useradd -g mysql mysql
[/code]
解压 MySQL 源代码包
假设你把 MySQL 源代码包放在 /usr/local/src 目录下。第二步:解压 mysql 软件包。
[code][root@vcyber /]# cd /usr/local/src
[root@vcyber src]# ls
mysql-5.6.28.tar.gz
[root@vcyber src]# tar zxf mysql-5.6.28.tar.gz
[root@vcyber src]# ls
mysql-5.6.28 mysql-5.6.28.tar.gz
[root@vcyber src]#
[/code]
此时,会看见一个新目录 mysql-5.6.28。
其中,解压时,-x 为解压;-z 为包有gzip属性;-f 为使用档案名字。当然,也可以用 -v 显示解压过程。
生成配置安装文件
以下两步任选其一,MySQL 早期版本,提供 Configure 文件以便在编译安装前进行配置;但在高版本已不提供该文件,而是采用 cmake。假设,MySQL 安装到 /usr/local/mysql 下。
第三步:
使用“Configure”命令配置安装需要的系统环境,并生成安装配置文件
[root@vcyber mysql-5.6.28]# ./configure \
> --prefix=/usr/local/mysql \
> --with-extra-charsets=all
如果采用 cmake 就跳过这步。
使用“cmake”配置安装需要的系统环境,并生成安装配置文件
[root@vcyber mysql-5.6.28]# cmake \
> -DDEFAULT_CHARSET=utf8
> -DDEFAULT_COLLATION=utf8_general_ci
> -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
> -DEXTRA_CHARSETS=all
指定 MySQL 的安装位置为“/usr/local/mysql”,以及采用的默认字符集等。
我在试验时,如果不配置字符集的相关选项,在执行后面 mysql_install_db 那步时会报各种字符集错误。
编译和安装
编译和安装很简单。第四步:使用“make”命令编译源代码文件,并生成安装文件,再用“make install”命令安装。
[root@vcyber mysql-5.6.28]# make&& make install
或是编译与安装分开执行:
[root@vcyber mysql-5.6.28]# make
[root@vcyber mysql-5.6.28]# makeinstall
自此,MySQL 就会安装到 /usr/local/mysql 下。
MySQL 配置文件
第五步:创建 MySQL 数据库服务器的配置文件,可以使用源代码包 support-files 目录中的 my-default.cnf 文件作为模板,将其复制到 /etc/ 目录下,重命名为“my.cnf”文件。[code][root@vcyber /]# cd /usr/local/src/mysql-5.6.28
[/code]
[root@vcyber mysql-5.6.28]# cp support-files/my-default.cnf /etc/my.cnf
并用 vi /etc/my.cnf 修改该配置文件,内容如下。
[code][mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
sock = /tmp/mysql.sock
[/code]
模板文件不只是源代码中有,安装目录中也有。
创建 MySQL 授权表
第六步:如果还没安装过 MySQL,必须创建 MySQL 授权表。进入安装目录(/usr/local/mysql)下,执行 bin 目录下的 mysql_install_db 脚本,初始化 MySQL 数据库的授权表,其中,存储了服务器访问允许。当 MySQL 发生故障或需要新加一个 mysql 实例时,需要初始化 mysql 数据库。使用 --help 可以查看支持的选项。
[root@vcyber mysql]# cd /usr/local/mysql
root@vcyber mysql]# scripts/mysql_install_db --user=mysql
Installing MySQL system tables...2016-02-02 02:42:33 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2016-02-02 02:42:33 0 [Note] ./bin/mysqld (mysqld 5.6.28) starting as process 28034 ...
2016-02-02 02:42:33 28034 [Note] InnoDB: Using atomics to ref count buffer pool pages
2016-02-02 02:42:33 28034 [Note] InnoDB: The InnoDB memory heap is disabled
2016-02-02 02:42:33 28034 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-02-02 02:42:33 28034 [Note] InnoDB: Memory barrier is not used
2016-02-02 02:42:33 28034 [Note] InnoDB: Compressed tables use zlib 1.2.3
2016-02-02 02:42:33 28034 [Note] InnoDB: Using Linux native AIO
2016-02-02 02:42:33 28034 [Note] InnoDB: Using CPU crc32 instructions
2016-02-02 02:42:34 28034 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2016-02-02 02:42:34 28034 [Note] InnoDB: Completed initialization of buffer pool
2016-02-02 02:42:34 28034 [Note] InnoDB: The first specified data file ./ibdata1 did not exist: a new database to be created!
……
如果用 root 用户运行上面的命令,应该使用 --user 选项,选项的值应与你在第一步为运行服务器所创建的登录账户(本例是 mysql 用户)相同。如果用 mysql 用户登录,运行上面命令,可以忽略 --user 选项。
用 mysql_install_db 创建 MySQL 授权表后,需要手动重新启动服务器。
如果执行这步时报错,说明你的第三步有问题。
MySQL 目录授权
第七步:将 MySQL 安装目录 bin 目录下执行文件的所有权改为 root 用户,数据目录的所有权改为运行 mysqld 程序的 mysql 用户。如果现在位于安装目录(/usr/local/mysql)下,命令行如下。[code][root@vcyber mysql-5.6.28]# cd /usr/local/mysql
[root@vcyber mysql]# pwd
/usr/local/mysql
[/code]
[code][root@vcyber mysql]# chown -R root .
[/code]
[code][root@vcyber mysql]# chown -R mysql data
[/code]
[code][root@vcyber mysql]# chgrp -R mysql .
[root@vcyber mysql]# ls -l
total 180
drwxr-xr-x 2 root mysql 4096 Feb 2 02:23 bin
-rw-r--r-- 1 root mysql 17987 Nov 16 17:38 COPYING
drwxr-xr-x 5 mysql mysql 4096 Feb 2 09:20 data
drwxr-xr-x 2 root mysql 4096 Feb 2 02:23 docs
drwxr-xr-x 3 root mysql 4096 Feb 2 02:23 include
-rw-r--r-- 1 root mysql 105684 Nov 16 18:45 INSTALL-BINARY
drwxr-xr-x 3 root mysql 4096 Feb 2 02:23 lib
drwxr-xr-x 4 root mysql 4096 Feb 1 08:45 man
-rw-r--r-- 1 root mysql 943 Feb 1 08:46 my.cnf
-rw-r--r-- 1 root mysql 943 Feb 2 02:42 my-new.cnf
drwxr-xr-x 10 root mysql 4096 Feb 1 08:45 mysql-test
-rw-r--r-- 1 root mysql 2496 Nov 16 17:38 README
drwxr-xr-x 2 root mysql 4096 Feb 1 08:45 scripts
drwxr-xr-x 28 root mysql 4096 Feb 1 08:45 share
drwxr-xr-x 4 root mysql 4096 Feb 1 08:45 sql-bench
drwxr-xr-x 2 root mysql 4096 Feb 1 08:45 support-files
[root@vcyber mysql]#
[/code]
注意第三列的变化。另外,
“chown –R root .”,将文件的所有属性改为 root 用户。注意那个点,表示所有文件;
“chown –R mysql data”,将数据目录的所有属性改为 mysql 用户;
“chgrp –R mysql .”,将组属性改为 mysql 组。注意那个点,表示所有文件。
启动 MySQL
到目前为止,所有需要的东西都安装完成,可以启动 MySQL 服务了。第八步:启动 MySQL。当然,你可以让 MySQL 开机时自动运行,后面介绍。
[code][root@vcyber ~]# cd /usr/local/mysql
[root@vcyber mysql]# bin/mysqld_safe --user=mysql
[root@vcyber mysql]#
[/code]
验证 MySQL 安装
下面,验证一下,MySQL 服务是否正常。第九步:MySQL 数据库服务启动后,查看一下它的端口 3306 是否打开,如果看到以下结果表明 MySQL 服务启动成功了。
[code][root@vcyber mysql]# netstat -tnl | grep 3306
tcp 0 0 :::3306 :::* LIST EN
[root@vcyber mysql]#
[/code]
第十步:使用 mysqladmin 验证服务器是否运行中。以下命令提供了简单的测试,检查服务器是否已经启动并能响应连接。
[code][root@vcyber mysql]# pwd
/usr/local/mysql
[root@vcyber mysql]# bin/mysqladmin version
bin/mysqladmin Ver 8.42 Distrib 5.6.28, for Linux on x86_64
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Server version 5.6.28
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /tmp/mysql.sock
Uptime: 9 min 7 sec
Threads: 1 Questions: 9 Slow queries: 0 Opens: 67 Flush tables: 1 Open tables: 60 Queries per second avg: 0.016
[root@vcyber mysql]#
[/code]
[code][root@vcyber mysql]# bin/mysqladmin variables
+--------------------------------------------------------+----------------------------------------------------------------------------------+
| Variable_name | Value |
+--------------------------------------------------------+----------------------------------------------------------------------------------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
| autocommit | ON |
| automatic_sp_privileges | ON |
| avoid_temporal_upgrade | OFF |
| back_log | 80 |
| basedir | /usr/local/mysql |
…… |
+--------------------------------------------------------+----------------------------------------------------------------------------------+
[root@vcyber mysql]#
[/code]
设置 MySQL 访问权限
第十一步:设置访问权限。使用 mysql_install_db 安装 MySQL 数据库授权表,定义了初始 MySQL 用户账号和访问权限,所有账号均没有密码。这些账号为超级用户,可以执行任何操作。
初始 root 账户的密码为空,任何人可以用 root 账户不用输入任何密码就可以连接 MySQL 服务器,并具有所有权限,这意味着 MySQL 安装未受保护。所以,应该为匿名账户指定密码或删除匿名账户,为 MySQL root 账户指定密码。使用“mysql –u root”启动 MySQL 客户端控制台,连接 MySQL 服务器。命令行如下。
[root@vcyber mysql]# cd /usr/local/mysql
[root@vcyber mysql]# bin/mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.6.28 Source distribution
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2016-02-02 08:02:31 |
+---------------------+
1 row in set (0.00 sec)
mysql>
第十二步:如果匿名账户存在,并拥有全部权限,因此,删掉它可以提高安全,在 MySQL 客户端执行如下命令。
[code]mysql> select * from mysql.user \G
*************************** 1. row ***************************
Host: localhost
User: root
Password:
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: Y
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y
Super_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Execute_priv: Y
Repl_slave_priv: Y
Repl_client_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Create_user_priv: Y
Event_priv: Y
Trigger_priv: Y
Create_tablespace_priv: Y
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string:
password_expired: N
*************************** 2. row ***************************
Host: vcyber
User: root
Password:
Select_priv: Y
……: ……
*************************** 3. row ***************************
Host: 127.0.0.1
User: root
Password:
Select_priv: Y
……: ……
*************************** 4. row ***************************
Host: ::1
User: root
Password:
Select_priv: Y
……: ……
*************************** 5. row ***************************
Host: localhost
User:
Password:
Select_priv: N
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Reload_priv: N
Shutdown_priv: N
Process_priv: N
File_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Show_db_priv: N
Super_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Execute_priv: N
Repl_slave_priv: N
Repl_client_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Create_user_priv: N
Event_priv: N
Trigger_priv: N
Create_tablespace_priv: N
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string: NULL
password_expired: N
*************************** 6. row ***************************
Host: vcyber
User:
Password:
Select_priv: N
……: ……
6 rows in set (0.00 sec)
mysql>
[/code]
[code]mysql> DELETE FROM mysql.user WHERE Host='localhost' and User='';
Query OK, 1 rows affected(0.08 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 1 rows affected(0.08 sec)
[/code]
第十三步:可以用几种方法为 root 账户指定密码。其中之一,在 MySQL 客户端命令行上使用 SET PASSWORD 指定密码,一定要使用 PASSWORD() 函数来加密密码。例如,下面设置 localhost 域的密码为“123456”。其他域可以使用同样的语句,SQL 语句如下。
[code]
mysql> SET PASSWORD FOR 'root'@'localhost'=PASSWORD('123456');
Query OK, 0 rows affected (0.02 sec)
mysql>
[/code]
第十四步:如果想退出 MySQL 客户端,可以输入 exit 或 quit,还可以用组合键 Ctrl+C。因为已经设置了 root 账户的密码,所以再次登录 MySQL 客户端就要提供密码才能进入。
mysql> exit
[root@vcyber mysql]#
[code][root@vcyber mysql]# bin/mysql -u root –h localhost -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.6.28 Source distribution
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
[/code]
如果想关闭 MySQL 服务器,在命令行使用 MySQL 服务器的 mysqladmin 命令,通过 –u 选项给出数据库管理员用户 root,-p 选项给出密码,即可关闭 MySQL 服务器。
[code][root@vcyber mysql]# bin/mysqladmin -u root -p shutdown
Enter password:
[root@vcyber mysql]#
[/code]
MySQL 开机自动启动
第十五步:有必要将 MySQL 服务设置成开机自动运行。方法是,进入 MySQL 源代码目录(/usr/local/src/mysql-5.6.28)中,将子目录 support-files 下的 mysql.server 文件复制到 /etc/rc.d/init.d/ 目录中,并重命令为 mysqld。[code][root@vcyber mysql]# cd /usr/local/src/mysql-5.6.28
[root@vcyber mysql-5.6.28]# pwd
/usr/local/src/mysql-5.6.28
[/code]
[code][root@vcyber mysql-5.6.28]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@vcyber mysql-5.6.28]#
[/code]
此时,就已经可以手动启动/停止 MySQL 数据库。命令如下:
[code][root@vcyber mysql]# service mysqld status
SUCCESS! MySQL running (24426)
[root@vcyber mysql]# service mysqld stop
Shutting down MySQL..141223 11:37:29 mysqld_safe mysqld from pid file /mysql/data/testdb1.pid ended
SUCCESS!
[1]+ Done bin/mysqld_safe --user=mysql (wd: /mysql)
(wd now: /etc)
[root@vcyber mysql]# service mysqld start
Starting MySQL.SUCCESS!
[root@vcyber mysql]#
[/code]
但若想让 MySQL 在开机时自动启动,还需要如下设置。
修改 /etc/rc.d/init.d/mysqld 权限,如下所示:
[code][root@vcyber mysql-5.6.28]# chown root.root /etc/rc.d/init.d/mysqld
[root@vcyber mysql-5.6.28]# chmod 755 /etc/rc.d/init.d/mysqld
[root@vcyber mysql-5.6.28]#
[/code]
使用 chkconfig 命令设置在不同系统运行级别下的自启动策略,首先使用“chkconfig --add mysqld”命令增加所指定的 mysqld 服务,让 chkconfig 指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。使用命令如下所示:
[code][root@vcyber mysql-5.6.28]# chkconfig --add mysqld
[root@vcyber mysql-5.6.28]#
[/code]
然后,使用“chkconfig --level 3 mysqld on”命令和“chkconfig --level 5 mysqld on”命令,在第三等级和第五等级中开启 mysqld 服务,即在字符模式和图形模式启动时自动开启 mysqld 服务。命令如下所示:
[code][root@vcyber mysql-5.6.28]# chkconfig --level 3 mysqld on
[root@vcyber mysql-5.6.28]# chkconfig --level 5 mysqld on
[root@vcyber mysql-5.6.28]#
[/code]
再使用“chkconfig --list”命令检查设置。命令如下所示:
[code][root@vcyber mysql-5.6.28]# chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@vcyber mysql-5.6.28]#
[/code]
自此,MySQL 安装配置结束。
设置环境变量
设置环境变量后,你就可以不用输入 MySQL 客户端命令的全路径啦。编辑 etc/my.cnf,追加如下内容:
[code][mysqld]
lower_case_table_names=1
[/code]
设置环境:
[code][root@vcyber mysql]# cd /etc
[root@vcyber etc]# vi profile
[/code]
在文件最后增加:
[code]PATH=/opt/mysql/bin:/opt/mysql/lib:$PATH
export PATH
[/code]
生效环境变量:
[code][root@vcyber etc]# source profile
[/code]
参考资料
Installing MySQL from Source相关文章推荐
- MYSQL 区分大小写及乱码解决
- [MySQL]快速解决"is marked as crashed and should be repaired"故障
- MySQL中死锁
- mysql 触发器
- 【MySQL】MySQL无基础学习和入门之一:数据库基础概述和实验环境搭建
- MySql主从复制的简单实现
- java数据库编程——Insert and Retrieve Images from MySql Table Using Java
- 通过yum安装mysql
- MySQL分片水很深
- mysql 时区与时间函数
- MySQL 主从复制
- MySql中in和exists效率
- MySQL中阻塞
- MySQL中的视图及性能问题
- MySqlDataReader
- MySQL连接及基本信息查看命令小结
- MySQL连接及基本信息查看命令小结
- 修改默认MYSQL数据库data存放位置
- mysql查询优化器为什么可能会选择错误的执行计划
- mysql安装