编译法安装MySQL数据库:


一、准备安装介质与依赖包


执行yum安装相关所需要的包:
yum -y install  gcc gcc-c++ gcc-g77 autoconf automake zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel* make cmake 


下载MySQL源码包安装介质: 选择对应的版本和介质类型,MySQL源码包和RPM包不同,一般只有20M-30M 左右。
具体版本可根据需要进行下载,一般 5.6.1.6 版本稳定性较好。


二、创建MySQL用户和组
创建操作系统层的MySql专用账户和用户组,均命名为MySql:
# id mysql
# userdel mysql
# groupdel mysql


# groupadd mysql
# useradd -g mysql mysql




设置系统资源限制,命令如下:
# vi /etc/security/limits.conf
在文件最后加入如下内容:
mysql soft nproc 2047
mysql hard nproc 16384
mysql soft nofile 1024
mysql hard nofile 65536
输入 :wq ,保存并退出。




三、编译安装MySQL软件
执行tar命令解压MySql源码包,并进入解压缩目录中:
ftp mysql-5.6.12.tar.gz
# tar -zxvf mysql-5.6.12.tar.gz 
# cd mysql_5.6.12




执行cmak命令,生成编译配置文件: **主机目录,需确认或修改
# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DCOMPILATION_COMMENT='Zhaofx for mysqltest' \
-DWITH_READLINE=ON \
-DSYSCONFDIR=/data/mysqldata/3306 \
-DMYSQL_UNIX_ADDR=/data/mysqldata/3306/mysql.sock




cmake执行成功的话,则最后输出结果类似:
...............
-- Configurating done
-- Generation done
-- Build files have been written to: /data/software/mysql-5.6.12


接下来执行编译和安装,这一步依赖机器性能,可能耗时较长:
# make && make install



修改MySQL文件所在目录拥有者weMySQL用户,命令为:
# chown -R mysql:mysql /usr/local/mysql
修改MySQL用户的环境变量,编译.bash_profile文件:
# vi /home/mysql/.bash_profile
在该文件的最后增加两行:
export LANG=zh_CN.GB18030
export PATH=/usr/local/mysql/bin:$PATH
这样就可以再任意路径下使用MySQL命令,且指定操作系统字符集,修正无法输入中文的问题。


四、准备目录、my.cnf文件,创建MySQL数据库
首先为MySQL创建的数据库做准备性工作,由于之前数据文件默认指定的目录为/data/mysqldata/3306 ,因此我们就要将相应的目录都创建好,执行操作如下:
# cd /data/
# mkdir -p /data/mysqldata/{3306/{data,tmp,binlog},backup,scripts}
# chown -R mysql:mysql mysqldata
# su - mysql
$ cd /usr/local/mysql
注:MySQL建库的目录,可根据需要进行修改


手工创建my.cnf的命令为:
$ touch /data/mysqldata/3306/my.cnf
编辑该文件:
$ vi /data/mysqldata/3306/my.cnf
添加下列参数:
[client]
port = 3306
socket = /data/mysqldata/3306/mysql.sock


# The MySQL server
[mysqld]
port = 3306
user = mysql
socket = /data/mysqldata/3306/mysql.sock
pid-file = /data/mysqldata/3306/mysql.pid
basedir = /usr/local/mysql
datadir = /data/mysqldata/3306/data
tmpdir = /data/mysqldata/3306/tmp
open_files_limit = 10240
explicit_defaults_for_timestamp
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES


# Buffer
max_allowed_packet = 256M
max_heap_table_size = 256M
net_buffer_length = 8K
sort_buffer_size = 2M
join_buffer_size = 4M
read_buffer_size = 2M
read_rnd_buffer_size = 16M


# Log
log-bin = /data/mysqldata/3306/binlog/mysql-bin
binlog_cache_size = 32M
max_binlog_cache_size = 512M
max_binlog_size = 512M
binlog_format = mixed
log_output = FILE
log-error = ../slow_error.log
slow_query_log = 1
slow_query_log_file = ../slow_query.log
general_log = 0
general_log_file = ../general_query.log
expire-logs-days = 14


# InnoDB
innodb_data_file_path = ibdata1:2048M:autoextend
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
innodb_buffer_pool_size =1024M


[mysql]
no-auto-rehash
prompt = (\u@\h) [\d]>\_
default-character-set = gbk


注:具体路径可以根据实际情况,进行修改,保存并退出。


接下来最重要的一步,初始化MySQL数据库。MySQL提供了相应的命令mysql_install_db,位于MySQL软件安装的scripts目录内,直接执行即可:
$ /usr/local/mysql/scripts/mysql_install_db --datadir=/data/mysqldata/3306/data --


basedir=/usr/local/mysql
注意:该处可能有错误,之前执行多次,均不能成功。
对于不同小版本的MySQL数据库,在参数和一些小的设置上都可以有问题,要区分对待,否则会造成MySQL无法启动。


五、启动数据库服务,进行初始修改
linux下建议使用 mysqld_safe 命令行方式启动MySQL服务:
$ mysqld_safe --defaults-file=/data/mysqldata/3306/my.cnf &


MySQL提示可以使用mysqladmin命令修改用户的密码,但一般建议直接到数据库中操作用户字典表:
$ mysql
msql> select user,host from mysql.user;
默认6条记录,有6个账户,其中2个用户名为空的记录,这是可以直接进入的原因。
出于安全和易管理的考虑,删除除root从本地连接外的其他所有记录,命令如下:
msyql> delete from mysql.user where (user,host) not in (select 'root','localhost');
修改root用户的用户名和密码:
mysql> update mysql.user set user='system',password=password('123456');
由于还存在test库查询mysql.db表内容的安全隐患,直接删除:
mysql> truncate table mysql.db;
mysql> flush privileges;

验证登录:
mysql> exit
$ mysql
会出现 ERROR 1045(28000)访问被拒绝(使用密码)的提示,使用下面的命令连接:
$ mysql -u system -p
$ mysql -u jjh -p -S /data/mysqldata/3307/mysql.scok

创建应用所需的数据库和用户:
mysql> create database jiradb character set utf8;
Query OK, 1 row affected (0.03 sec)

mysql> grant all privileges on jiradb.* to jirauser@'%' identified by '123456' with grant option;
Query OK, 0 rows affected (0.02 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)


六、配置MySQL管理脚本,方便管理


配置MySQL管理脚本:
脚本1:创建中间定义文件,提高脚本复用性:
$ vi /data/mysqldata/scripts/mysql_env.ini
增加下列内容:
# set env
MYSQL_USER=system
MYSQL_PASS='123456'

# check parameter
if [ $# -ne 1 ]
then 
        HOST_PORT=3306
else
        HOST_PORT=$1
fi


修改该文件在操作系统的权限:
$ chmod 600 /data/mysqldata/scriptes/mysql_env.ini




脚本2:创建 mysql_db_startup.sh 脚本,用于启动MySQL服务;
$ vi /data/mysqldata/scripts/mysql_db_startup.sh
增加下列内容:
#!/bin/sh
# Create by zhaofx 20140620

source /data/mysqldata/scripts/mysql_env.ini

echo "Startup MySQl Service:localhost_"${HOST_PORT}
/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysqldata/${HOST_PORT}/my.cnf &

/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &


脚本3:创建 mysql_db_shutdown.sh 脚本,用于关闭MySQL服务:
$ vi /data/mysqldata/scripts/mysql_db_shutdown.sh
增加下列内容:
#!/bin/sh
# Create by zhaofx 20140620

source /data/mysqldata/scripts/mysql_env.ini

echo "Shutdown MySQL Service: localhost_"${HOST_PORT}
/usr/local/mysql/bin/mysqladmin -u${MYSQL_USER} -p${MYSQL_PASS} -S /data/mysqldata/

${HOST_PORT}/mysql.sock shutdown


示例: /usr/local/mysql/bin/mysqladmin -uroot -p'123456' -S /data/mysqldata/3307/mysql.sock shutdown
注:单独关闭MySQL服务可以用类似的命令 mysqladmin -u root -p shutdown


脚本4:创建mysqlplus.sh脚本,用于快速登录:
$ vi /data/mysqld/scripts/mysqlplus.sh
增加如下内容:
#!/bin/sh
# Create by zhaofx 20140620

source /data/mysqldata/scripts/mysql_env.ini

echo "Login MySQL Srevice: lcoalhost_"${HOST_PORT}
/usr/local/mysql/bin/mysql -u${MYSQL_USER} -p${MYSQL_PASS} -S /data/mysqldata/${HOST_PORT}/mysql.sock $2

授予上面几个脚本的执行权限,以方便调用:
$ chmod +x /data/mysqldata/scripts/*.sh
编辑MySQL用户的环境变量,将上述路径加入到path中,执行命令:
$ echo "export PATH=/data/mysqldata/scripts:\$PATH" >> ~/.bash_profile
$ source ~/.bash_profile

之后,本地连接MySQL服务,就可以直接执行mysqlplus脚本,省去输入用户名密码等参数:
$ mysqlplus.sh
即使当前服务器中有多个MySQL实例,分别绑定在不同的端口上,也可以执行mysqlplus时指定对应端口即可,如果没有指定,默认连接3306端口。此外可以尝试执行两个两个脚本来停止或启动MySQL服务。


七、配置MySQL开机自动启动 
若希望MySQL服务能够开机自动启动,最简单的方式,就是将启动脚本加入到启动脚本文件中就可以了。
编辑/etc/rc.local 文件,需要root用户执行:
# vi /etc/rc.local
增加下列内容到最后一行:
# atuostart myql , add by zhaofx at 20140620
sudo -i -u mysql /data/mysqldata/scripts/mysql_db_startup.sh 3306 > /home/mysql/mysql_db_startup.log 2>&1


注意:执行sudo命令是可能遇到如下错误:
sudo:sorry,you must have a try to run sudo
遇到这种情况,可以通过修改sudo的配置来避免错误的发生,比如执行vissudo命令,或者用文本编辑工具打开/etc/sudoers文件,注释掉第56行,如下:
#Defaults requirety
保存后退出,再次执行就一切正常了。