一、下载MySQL5.6.24源码包,安装编译工具及库文件
官网下载地址:http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.24.tar.gz
也可选择从国内的搜狐镜像下载:http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.24.tar.gz
注:源码包的文件名一般都是这种格式:mysql-<版本号>.tar.gz
安装编译工具及所需的库文件
# yum -y install autoconf automake curl curl-devel libevent* libtool* autoconf* freetype* libstd* ncurse* bison* libxml* openssl* zlib*
# yum -y install gcc gcc-c++
(备注:从MySQL5.6开始,需要用到g++来编译,因此必须事先提供g++编译器。而5.5版本可以用gcc编译。)
同时,删除系统自带的mysql
# yum remove mysql
二、安装编译配置工具CMake
由于MySQL的源码安装包从5.5版本开始,编译配置工具换成了CMake,因此需要先安装好cmake工具:
1、下载cmake源码包:cmake-2.8.5.tar.gz
2、root用户下解压:
# cp cmake-2.8.5.tar.gz /tmp
# cd /tmp
# tar -zxvf cmake-2.8.5.tar.gz
# cd cmake-2.8.5
3、root用户下编译安装:
# ./bootstrap
# gmake && gmake install
三、安装boost库
# wget http://nchc.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
# tar zxvf boost_1_59_0.tar.gz
# mv boost_1_59_0 /usr/local/boost
# chown -R root:root /usr/local/boost
四、创建mysql用户、用户组
# groupadd mysql
# useradd -g mysql -m -d /home/mysql -s /bin/bash mysql
# passwd mysql
五、创建所需的目录、创建软链接
# mkdir -p /usr/local/mysql-5.6.24
# mkdir -p /usr/local/mysql-5.6.24/conf
# mkdir -p /usr/local/mysql-5.6.24/run
# mkdir -p /usr/local/mysql-5.6.24/log
# ln -s /usr/local/mysql-5.6.24 /usr/local/mysql
六、 设置用户操作系统资源的限制
# vi /etc/security/limits.conf
在文件最后添加如下内容:
mysql soft nproc 2047
mysql hard nproc 16384
mysql soft nofile 1024
mysql hard nofile 65536
七、解压mysql源码包、配置、编译安装
1、解压:
# tar -zxvf mysql-5.6.24.tar.gz -C /tmp
# cd /tmp/mysql-5.6.24
2、配置:
执行cmake命令,生成编译配置文件(相当于以前的./configure)
第一次执行cmake配置后,有出现如下的报错:
CMake Warning:
Manually-specified variables were not used by the project:
WITH_MEMORY_STORAGE_ENGINE
WITH_READLINE
5.6.24版本已经不支持上面这2个参数了:
(http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html#option_cmake_with_readline)
备注: MySQL默认支持:MyISAM,MERGE,MEMORY,CSV存储引擎。
因此,删除当前目录下CMakeCache.txt(或者删除整个目录并重新解压mysql源码包),再次执行不带这2个参数的cmake命令:
# make clean
# rm -f CMakeCache.txt
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.24 \
-DMYSQL_DATADIR=/data/mysql_data \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_USER=mysql \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost
这一次配置执行成功。
注意,这个cmake是替代以前的./configure 步骤。如果你需要更多的参数,请参考http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html。
3、编译、安装:
# time make -j
# time make install
# # 或者
# make -j && make install
注:
①make的-j 选项,是利用多线程并发编译,对于多核CPU的机器来说,可以提高编译速度(虚拟机单线程就免了)
②这一步的耗时可能很久,具体与机器配置性能有关,可以冲一杯咖啡、转悠一下
至此,mysql已编译安装到/usr/local/mysql-5.6.24。
八、准备好配置文件(my.cnf)
MySQL 5.6.8开始,就不再分发my.cnf等各个级别配置的sample,只提供了support-files/my-default.cnf文件作为模板,旧的那几个全都不再提供。
不过没关系,咱们可以手动创建一个my.cnf文件,指定具体的参数配置。
# cp /usr/local/mysql/support-files/my-default.cnf /usr/local/mysql-5.6.24/conf/my.cnf
清空my.cnf的原始样本内容,添加以下内容:
[mysqld_safe]
pid-file=/usr/local/mysql-5.6.24/run/mysqld.pid
#malloc-lib=/usr/local/mysql-5.6.24/lib/libjemalloc.so
[mysql]
port=3306
prompt=\\u@\\d \\r:\\m:\\s>
default-character-set=utf8
no-auto-rehash
[client]
port=3306
socket=/usr/local/mysql-5.6.24/run/mysql.sock
[mysqld]
port=3306
#bind-address=127.0.0.1
basedir=/usr/local/mysql-5.6.24
datadir=/usr/local/mysql-5.6.24/data
socket=/usr/local/mysql-5.6.24/run/mysql.sock
tmpdir=/tmp
lc_messages_dir=/usr/local/mysql-5.6.24/share
log-error=/usr/local/mysql-5.6.24/log/alert.log
slow_query_log_file=/usr/local/mysql-5.6.24/log/slow.log
general_log_file=/usr/local/mysql-5.6.24/log/general.log
############# default settings ################
# time zone
default-time-zone = system
character-set-server = utf8
default-storage-engine = InnoDB
############# advised configuration by dataguru mysql class (WangHeng - Henry) ################
##innodb
#innodb_data_home_dir=/project/class2/mysql/data
#innodb_log_group_home_dir=/project/class2/mysql/data
#innodb_data_file_path=ibdata1:2G;ibdata2:16M:autoextend
#innodb_buffer_pool_size=10G
#innodb_buffer_pool_instances=4
#innodb_log_files_in_group=2
#innodb_log_file_size=1G
#innodb_log_buffer_size=200M
#innodb_flush_log_at_trx_commit=1
#innodb_additional_mem_pool_size=20M
#innodb_max_dirty_pages_pct=60
#innodb_io_capacity=1000
#innodb_thread_concurrency=16
#innodb_read_io_threads=8
#innodb_write_io_threads=8
#innodb_open_files=60000
#innodb_file_format=Barracuda
#innodb_file_per_table=1
#innodb_flush_method=O_DIRECT
#innodb_change_buffering=inserts
#innodb_adaptive_flushing=1
#innodb_old_blocks_time=1000
#innodb_stats_on_metadata=0
#innodb_read_ahead=0
#innodb_use_native_aio=0
#innodb_lock_wait_timeout=5
#innodb_rollback_on_timeout=0
#innodb_purge_threads=1
#innodb_strict_mode=1
#transaction-isolation=READ-COMMITTED
#
##myisam
#key_buffer=64M
#myisam_sort_buffer_size=64M
#concurrent_insert=2
#delayed_insert_timeout=300
#
##replication
#master-info-file=/project/class2/mysql/log/master.info
#relay-log=/project/class2/mysql/log/relaylog
#relay_log_info_file=/project/class2/mysql/log/relay-log.info
#relay-log-index=/project/class2/mysql/log/mysqld-relay-bin.index
#slave_load_tmpdir=/project/class2/mysql/tmp
#slave_type_conversions="ALL_NON_LOSSY"
#slave_net_timeout=4
#skip-slave-start
#sync_master_info=1000
#sync_relay_log_info=1000
#
##binlog
#log-bin=/project/class2/mysql/log/mysql-bin
#server_id=2552763370
#binlog_cache_size=32K
#max_binlog_cache_size=2G
#max_binlog_size=500M
#binlog-format=ROW
#sync_binlog=1000
#log-slave-updates=1
#expire_logs_days=0
#
##server
#default-storage-engine=INNODB
#character-set-server=gbk
#lower_case_table_names=1
#skip-external-locking
#open_files_limit=65536
#safe-user-create
#local-infile=1
##sqlmod="STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE"
#performance_schema=0
#
#log_slow_admin_statements=1
#log_warnings=1
#long_query_time=1
#slow_query_log=1
#general_log=0
#
#query_cache_type=0
#query_cache_limit=1M
#query_cache_min_res_unit=1K
#
#table_definition_cache=65536
#table_cache=65536
#
#thread_stack=512K
#thread_cache_size=256
#read_rnd_buffer_size=128K
#sort_buffer_size=256K
#join_buffer_size=128K
#read_buffer_size=128K
#
#port=3306
#skip-name-resolve
#skip-ssl
#max_connections=4500
#max_user_connections=4000
#max_connect_errors=65536
#max_allowed_packet=128M
#connect_timeout=8
#net_read_timeout=30
#net_write_timeout=60
#back_log=1024
my.cnf的配置文件的默认读取顺序为
File Name(上面的优先) | Purpose |
---|---|
/etc/my.cnf |
Global options |
/etc/mysql/my.cnf |
Global options |
|
Global options |
$MYSQL_HOME/my.cnf |
Server-specific options |
defaults-extra-file |
The file specified with --defaults-extra-file= , if any |
~/.my.cnf |
User-specific options |
~/.mylogin.cnf |
Login path options |
我的这个配置比较简单,声明一下常用的变量,如果你需要对性能优化,那么你需要细细研读一下配置文件。可以参考
九、初始化数据库
# cd /usr/local/mysql-5.6.24
# rm -rf /usr/local/mysql-5.6.24/data/* #先删除安装后自带的data下的目录(目录是空的)
# ./scripts/mysql_install_db --datadir=/usr/local/mysql-5.6.24/data --user=mysql
Installing MySQL system tables...2016-01-17 22:10:19 0
2016-01-17 22:10:19 0 [Note] ./bin/mysqld (mysqld 5.6.24) starting as process 20205 ...
OK
Filling help tables...2016-01-17 22:10:25 0
2016-01-17 22:10:25 0 [Note] ./bin/mysqld (mysqld 5.6.24) starting as process 20232 ...
OK
...
①在安装输出日志中,看到这2个OK字样,一般就是初始化成功了
②这里出现了ERROR报错'skip-locking',原因是之前安装过MySQL,存在/etc/my.cnf文件,而且mysql的环境变量和现在的不一样,因此影响当前的mysql。
解决方法:rm -rf /etc/my.cnf
再次执行初始化的命令,执行成功:
# cd /usr/local/mysql-5.6.24
# rm -rf /usr/local/mysql-5.6.24/data/* #先删除安装后自带的data下的目录(目录是空的)
# ./scripts/mysql_install_db --datadir=/usr/local/mysql-5.6.24/data --user=mysql
③初始化成功后,会自动在/usr/local/mysql-5.6.24目录下生成my.cnf示例文件,这里删除即可(因为已有conf/my.cnf)
十、修改/usr/local/mysql*和/db_data/mysql*目录的属主、组
# chown -R mysql:mysql /usr/local/mysql*
十一、放开防火墙对3306端口的限制
vi /etc/sysconfig/iptables , 添加一行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
然后重启iptable服务:
# service iptables restart
十二、设置MySQL服务、启动(可选项,按需)
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# chmod 755 /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld off
# #启动命令如下
# service mysqld start
# 或者:
$ /usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/conf/my.cnf &
(查看alert.log输出,看到下面的信息,就表示启动成功了:
Version: '5.6.24' socket: '/usr/local/mysql-5.6.24/run/mysql.sock' port: 3306 mysql sample for Goopand
)
并修改/etc/init.d/mysqld文件中的basedir和datadir如下:
basedir=/usr/local/mysql-5.6.24
datadir=/usr/local/mysql-5.6.24/data
十三、清除空密码数据库用户,增加外部连接用户
$ cd /usr/local/mysql/bin
$ ./mysql -h127.0.0.1 -P3306 -uroot
(初始的数据库root用户无密码)
mysql> SET PASSWORD = PASSWORD('123456'); (设置root用户密码,也可使用命令行工具:mysqladmin -u root password "new_password")
mysql> grant all privileges on *.* to 'root'@'%' identified by 'MyPassword' WITH GRANT OPTION;
mysql> flush privileges;
mysql> use mysql;
mysql> delete from user where password="";
mysql> exit;
说明:
grant <权限1>,<权限2>,...,<权限n> on <数据库名称>.<表名称> to <用户名>@<用户地址> identified by '<连接口令>';
关闭mysql服务
$ mysqladmin -h127.0.0.1 -P3306 -uroot -p shutdown
十四、配置Path环境变量
①设置全局环境变量
vi /etc/profile
#在文件末尾添加
PATH=/usr/local/mysql/bin:$PATH
export PATH
#保存退出,生效配置
# source /etc/profile
②设置mysql用户下的环境变量
vi /home/mysql/.bashrc
#在文件末尾添加
PATH=/usr/local/mysql/bin:$PATH
export PATH
#保存退出,生效配置
# source /home/mysql/.bashrc
来源:oschina
链接:https://my.oschina.net/u/814881/blog/415987