1. 背景
MySQL为开源数据库,因此可以基于源码实现安装。基于源码安装有更多的灵活性。也就是说我们可以针对自己的硬件平台选用合适的编译器来优化编译后的二进制代码,根据不同的软件平台环境调整相关的编译参数,选择自身需要选择不同的安装组件,设定需要的字符集等等一些可以根据特定应用场景所作的各种调整。本文描述了如何在源码方式下安装MySQL
2. 安装依赖包
# yum install wget bison gcc gcc-c++ make cmake ncurses-devel libtool zilib-devel perl -y
3. 配置OS资源限制
# vi /etc/security/limits.conf mysql soft nproc 2047 mysql hard nproc 16384 mysql soft nofile 1024 mysql hard nofile 65536
4. 配置OS防火墙
建议按业务场景设置,我这里先清掉
# service iptables stop;chkconfig iptables off
selinux如果没有这方面的需求,建议禁用
# vi /etc/sysconfig/selinux SELINUX=disabled SELINUXTYPE=targeted
5. 创建mysql帐号和用户组
# groupadd mysql # useradd -g mysql mysql
6. 创建安装目录
# mkdir -p /data/mysqldata/{3306/{data,tmp,binlog,logs,redo-log,undo-log},backup,scripts} # chown -R mysql:mysql /data/mysqldata
7. 安装mysql软件
# tar -zxvf mysql-5.6.15.tar.gz # cd mysql-5.6.15 # cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql56 \ -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='LOTTU' \ -DWITH_READLINE=ON \ -DSYSCONFDIR=/data/mysqldata/3306 \ -DMYSQL_UNIX_ADDR=/data/mysqldata/3306/mysql.sock
若编译过程总出现错误或者参数变更要重新配置,用通过rm删除源码包下的Cmakecache.txt文件重新执行cmake;或者直接删除源码目录重新解压缩并进行编译配置。
# make && make install
make是用来编译的,它从Makefile中读取指令,然后编译
make install是用来安装的,它也是从Makefile中读取指令,将软件安装到指定的位置。
常用参数:
-DCMAKE_INSTALL_PREFIX:用于指定软件的安装路径。默认安装到/usr/local/mysql下。
-DDEFAULT_CHARSET 指定mysql服务的默认字符集。默认为latin1,也可以在mysql服务启动时通过指定character_set_server参数进行设置
-DDEFAULT_COLLATION 指定mysql服务的默认校对规则,本参数的默认值为latin1_swedish_ci也可以在启动时通过colloation_server参数进行设置
-DENABLED_LOCAL_INFILE 是否允许从客户端本地加载数据到mysql服务端,专用于LOAD DATA INFILE语句,默认是不允许的。
-DENABLED_PROFILING 是否启动query profiling 专用于show profile和show profiles语句,默认是启用的。
-DMYSQL_DATADIR 指定mysql数据库数据文件的存储路径,这一选项可在mysql服务启动时通过datadir参数进行配置
-DSYSCONFDIR 指定mysql参数文件的默认位置,可在mysql服务启动时通过default-file参数进行设置。
-DWITH_xxx_STORAGE_ENGINE 静态编译某存储引擎。MyISAM、MERGE、MEMORY及CSV存储引擎默认就会被编译只服务端无需指定。另外PARTITION指定是否允许支持分区,PERFSCHEMA则是Performance_schema库
-DWITHOUT_xxx_STORAGE_ENGINE 用于指定不编译的存储引擎
-DWITH_EXTRA_CHARSETS 指定附加支持的字符集,默认是all全部
-DINSTALL_BINDIR 指定mysql各项命令的存储路径,默认在CMAKE_INSTALL_PREFIX/bin下
-DINSTALL_DOCDIR 指定mysql文档的存储路径 默认在CMAKE_INSTALL_PREFIX/docs下
-DINSTALL_INCLUDERDIR 指定头文件的存储路径 默认在CMAKE_INSTALL_PREFIX/include下
-DINSTALL_LIBDIR 指定链接文件的存储路径 默认在CMAKE_INSTALL_PREFIX/lib下
-DINSTALL_MANDIR 指定用户手册的存储路径 默认在CMAKE_INSTALL_PREFIX/man下
-DINSTALL_PLUGINDIR 指定Plugin的存储路径 默认在CMAKE_INSTALL_PREFIX/plugin下
-DINSTALL_SBINDIR 指定服务端执行脚本的存储路径 默认在CMAKE_INSTALL_PREFIX/bin下
-DINSTALL_SCRIPTDIR 指定mysql自带的mysql_install_db脚本的存储路径 默认在CMAKE_INSTALL_PREFIX/scripts下
-DINSTALL_SQLBENCHDIR 指定sql-bench存储路径 默认在CMAKE_INSTALL_PREFIX下
-DINSTALL_SUPPORTFILESDIR 指定mysql自带的附加支持类文件的存储路径 默认在CMAKE_INSTALL_PREFIX/support-files
-DMYSQL_TCP_PORT 指定mysql数据库提供服务的TCP/IP端口 默认3306。可在mysql启动时通过port参数进行设置。
-DMYSQL_UNIX_ADDR 指定套接字文件的存储路径 默认在/tmp/mysql.sock目录下,可在mysqk服务启动时通过socket参数进行设置
-DCOMPILATION_COMMENT 指定编译信息
-DWITH_READLINE 指定输入输出的处理方式,在5.1之前版本无需单独处理,默认就是使用readline方式,5.5之后MYSQL编译时默认使用
libedit处理输入和输出,可能导致当前环境登录mysql命令行模式后无法输入中文(仅针对当前编译环境,其他客户端不受影响)因此编译时需要指定其以readline方式处理
mysql软件安装完成;
8. 安装软件后续工作
# chown -R mysql:mysql /usr/local/mysql56 # vi /home/mysql/.bash_profile export LANG=zh_CN.GB18030 export PATH=/usr/local/mysql56/bin:$PATH
9. 配置参数文件
在/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/es_mysql1.pid basedir=/usr/local/mysql56 datadir=/data/mysqldata/3306/data tmpdir=/data/mysqldata/3306/tmp open_files_limit=500 explicit_defaults_for_timestamp sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #Buffer max_allowed_packet=32M max_heap_table_size=32M 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=16M max_binlog_cache_size=64M max_binlog_size=64M binlog_format=row log_output=FILE log-error=/data/mysqldata/3306/logs/mysql-error.log slow_query_log=1 slow_query_log_file=/data/mysqldata/3306/logs/slow_query.log general_log=0 general_log_file=/data/mysqldata/3306/logs/general_query.log expire-logs-days=14 #InnoDB innodb_data_file_path=ibdata1:1024M:autoextend innodb_log_file_size = 32M innodb_log_files_in_group =6 innodb_buffer_pool_size = 128M sync_binlog = 8 innodb_buffer_pool_load_at_startup = 1 innodb_buffer_pool_dump_at_shutdown = 1 innodb_log_group_home_dir=/data/mysqldata/3306/redo-log/ innodb_undo_directory=/data/mysqldata/3306/undo-log/ [mysql] no-auto-rehash prompt=(\u@\h) [\d]>\ default-character-set=gbk 参数可以到网上找查考..本环境是在虚拟机上面搭建的。
10. 初始化mysql数据库
# /usr/local/mysql56/scripts/mysql_install_db --datadir=/data/mysqldata/3306/data --basedir=/usr/local/mysql56
11. 启动mysql数据库
# mysqld_safe --defaults-file=/data/mysqldata/3306/my.cnf &
12. 配置mysql
delete from mysql.user where (user,host) not in (select 'root','localhost'); update mysql.user set user='system',password=password('li0924'); flush privileges;