首先准备编译环境
[root@DQ ~]# yum groupinstall "Server Platform Development"
[root@DQ ~]# yum groupinstall "Development tools"
一、编译安装cmake,先同步一下时间在解压安装
cmake的重要特性之一是其独立于源码(out-of-source)的编译功能,即编译工作可以在另一个指定的目录中而非源码目录中进行,这可以保证源码目录不受任何一次编译的影响,因此在同一个源码树上可以进行多次不同的编译,如针对于不同平台编译。
二、编译安装mysql-5.6.24
1、使用cmake编译mysql-5.6.24
cmake指定编译选项的方式不同于make,下表列出了常用编译工具的调用语法和等效的CMake命令;“.”表示你当前的工作目录路径,一般切换到源码目录下执行。
指定安装文件的安装路径时常用的选项:“CMAKE_INSTALL_PREFIX”的值表示的是安装根目录,其他参数值的路径都是相对于根目录的,当然也可以直接使用绝对路径
默认编译的存储引擎包括:csv、myisam、myisammrg和heap。若要安装其它存储引擎,可以使用类似如下编译选项:1可以使用on代替
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_FEDERATED_STORAGE_ENGINE=1
若要明确指定不编译某存储引擎,可以使用类似如下的选项:
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1
-DWITHOUT_FEDERATED_STORAGE_ENGINE=1
-DWITHOUT_PARTITION_STORAGE_ENGINE=1
如若要编译进其它功能,如SSL等,则可使用类似如下选项来实现编译时使用某库或不使用某库:
-DWITH_READLINE=1
-DWITH_SSL=system
-DWITH_ZLIB=system
-DWITH_LIBWRAP=0
其它常用的选项:
-DMYSQL_TCP_PORT=3306
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock
-DENABLED_LOCAL_INFILE=1
-DEXTRA_CHARSETS=all
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DWITH_DEBUG=0
-DENABLE_PROFILING=1
如果想清理此前的编译所生成的对象文件和缓存信息文件,则需要使用如下命令:
make clean
rm CMakeCache.txt
安装前的系统设置:准备mysql数据存放目录
[root@DQ ~]# fdisk /dev/sda
创建用户和组,赋予数据存放目录权限
解压mysql编译安装
修改/usr/local/mysql属组为mysql
进入安装路径,执行初始化配置脚本,创建系统自带的数据库和表
[root@DQ mysql]# scripts/mysql_install_db --user=mysql --datadir=/mnt/SQLData/
注:在CentOS 6.5版操作系统的最小安装完成后,在/etc目录下会存在一个my.cnf,需要将此文件更名为其他的名字,如:/etc/my.cnf.bak,否则,该文件会干扰源码安装的MySQL的正确配置,造成无法启动。
在使用”yum update”更新系统后,需要检查下/etc目录下是否会多出一个my.cnf,如果多出,将它重命名成别的。否则,MySQL将使用这个配置文件启动,可能造成无法正常启动等问题。
拷贝配置文件和启动脚本,设置开机自动启动
[root@DQ mysql]# vim /etc/my.cnf
MySQL启动成功后,需要先设置PATH环境变量,否则不能直接调用mysql
[root@DQ mysql]# cd /etc/profile.d/
[root@DQ profile.d]# vim mysql.sh
export PATH=$PATH:/usr/local/mysql/bin
保存配置文件,运行下面的命令,让配置立即生效
Mysql默认安装完成后会生成5个用户,4个root@localhost/@hostname/@127.0.0.1
::1为ipv6 以及2个匿名用户@localhost/@hostname
匿名用户是系统不安全的因素,应当删除,并为root用户设定连接mysql的密码
Update执行结束后需要使用flush privileges重读授权表
说明: MySQL的 系统在实现上比较简单,相关的权限信息主要存储在几个被称为grant tables的系统表中,即mysql.user,mysql.db,mysql.host,mysql.table_priv,mysql_priv;
由于权限信息的数据量比较小,访问又非常频繁,所以MySQL在启动的时候就会将所有的权限信息都加载到内存中,并保存在几个特定的结构中;这就使得每次手动修改了相关权限表之后,都必须要执行flush privileges,通知MySQL重新加载权限信息;当然如果通过grant,revoke,drop user命令来修改相关权限,则不需要手动执行flush privileges命令
确定开启每表一个独立的表空间文件;
如果不想每次从本地登录mysql都要手动输入密码,可以在用户家目录下编译一个隐藏配置文件存放用户密码,即可直接使用mysql连接数据库,要确保其他人没有任何权限
[client]
user=root
password=mysql
host=localhost
MyISAM每表三个文件:
.frm: 表结构
.MYD:表数据
.MYI:表索引
InnoDB:默认所有表共享一个表空间文件;
.frm: 表结构
.ibd: 表空间(表数据和表索引)
.opt:定义默认字符集和排序规则