① 下载MySQL源码包
检查文件的MD5,防止文件被篡改:
② 解压源码包
③ 建立MySQL账号
④ 安装所需要的工具
⑤ 新版本的MySQL安装不同以前版本
变化:
1.boost库是必需的,解压后复制到/usr/local/boost目录下,cmake并在后面的选项中加上
-DWITH_BOOST=/usr/local/boost
2.用cmake编译安装
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_BOOST=/usr/local/boost
选项常用参数:
-DSYSCONFDIR=/etc/mysql | 指向mysql配置文件目录(/etc/mysql) |
-DINSTALL_PLUGINDIR=lib/mysql/plugin | 指向插件目录(prefix/lib/mysql/plugin) |
-DCMAKE_INSTALL_PREFIX=dir_name | 设置mysql安装目录,默认/usr/local/mysql |
-DMYSQL_UNIX_ADDR=file_name | 设置监听套接字路径,这必须是一个绝对路径名。默认为/tmp/mysql.sock |
-DDEFAULT_CHARSET=charset_name | 设置服务器的字符集。指定服务器默认字符集,缺省情况下,MySQL使用latin1的(CP1252西欧)字符集。cmake/character_setsNaNake文件包含允许的字符集名称列表。 |
-DMYSQL_USER=username | 设置MySQL管理员 |
-DDEFAULT_COLLATION=utf8_general_ci | 设定默认排序规则(utf8_general_ci快速/utf8_unicode_ci准确) |
启用:-DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 禁用: | 存储引擎选项: MyISAM,MERGE,MEMORY,和CSV引擎是默认编译到服务器中,并不需要明确地安装。静态编译一个存储引擎到服务器,使用-DWITH_engine_STORAGE_ENGINE= 1 可用的存储引擎值有:ARCHIVE, BLACKHOLE, EXAMPLE, FEDERATED, INNOBASE (InnoDB), PARTITION (partitioning support), 和PERFSCHEMA (Performance Schema) |
-DMYSQL_DATADIR=dir_name | 设置mysql数据库文件目录 |
-DMYSQL_TCP_PORT=port_num | 设置mysql服务器监听端口,默认为3306 |
-DENABLE_DOWNLOADS=bool | 是否要下载可选的文件(BOOST类库)。例如,启用此选项(设置为1),cmake将下载谷歌所使用的测试套件运行单元测试。 |
-DWITH_BOOST=/usr/local/mysql/boost | 指定编译需要boost类库,将在指定路径查找,如未找到会指定下载并解压到指定的路径
|
-DINSTALL_SBINDIR=sbin | 指向可执行文件目录(prefix/sbin) |
-DENABLED_LOCAL_INFILE=1 | 启用本地数据导入支持,默认OFF |
WITH_COMMENT | 指定编译备注信息 |
WITHOUT_xxx_STORAGE_ENGINE | 指定不编译的存储引擎 |
SYSCONFDIR | 初始化参数文件目录 |
MYSQL_UNIX_ADDR | socket文件路径,默认/tmp/mysql.sock |
-DINSTALL_MANDIR=share/man | 指向man文档目录(prefix/share/man) |
-DINSTALL_SHAREDIR=share | 指向aclocal/mysql.m4安装目录(prefix/share) |
-DINSTALL_LIBDIR=lib/mysql | 指向对象代码库目录(prefix/lib/mysql) |
-DINSTALL_INCLUDEDIR=include/mysql | 指向头文件目录(prefix/include/mysql) |
-DINSTALL_INFODIR=share/info | 指向info文档存放目录(prefix/share/info) prefix官方推荐设为/usr |
-DWITH_READLINE=1 | 启用readline库支持(提供可编辑的命令行) |
-DWITH_SSL=system | 启用ssl库支持(安全套接层) |
-DWITH_ZLIB=system | 启用libz库支持(zib、gzib相关) |
-DWTIH_LIBWRAP=0 | 禁用libwrap库(实现了通用TCP包装的功能,为网络服务守护进程使用) |
-DMYSQL_TCP_PORT=3306 | 指定TCP端口为3306 |
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock | 指定mysql.sock路径 |
-DENABLED_LOCAL_INFILE=1 | 启用本地数据导入支持 |
-DEXTRA_CHARSETS=all | 启用额外的字符集类型(默认为all) |
-DWITH_EMBEDDED_SERVER=1 | 编译嵌入式服务器支持 |
-DWITH_DEBUG=0 | 禁用debug(默认为禁用) |
-DENABLE_PROFILING=0 | 禁用Profiling分析(默认为开启) |
-DWITH_COMMENT='string' | 一个关于编译环境的描述性注释 |
指定选项编译:
cmake 报错一:
解决:
①查资料说的是缺少ncurses-devel,yum安装一下或下载rpm包安装
②每次重新编译之前都需要删除掉上次安装过程中产生的缓存文件:
报错二:再重新cmake一次,再次报错,部分错误信息如下
原因:(没有安装C++工具)
编译成功:
接下来编译安装:
make && make install
安装成功后初始化MySQL:
进入到mysql目录更改相关目录属性:
chown -R root . //递归修改当前目录所有者为root
chown -R mysql data //递归修改data目录的所有者为mysql
后台启动mysqld服务失败:
官网说明运行mysql_install_db时会在安装目录创建一个默认选项的配置文件,名为my.cnf。
安装时指定过配置文件路径在/etc,所以修改配置文件/etc/my.cnf:
再次报错:
查看日志:
提示数据目录不为空:
删掉该目录下文件:
rm -rf /usr/local/mysql/data/*
再次初始化:(提示mysql_install_db已经过时,考虑使用mysqld --initialize)
启动成功:
查看端口:
5.7版本默认会生成root初始密码文件(/root.mysql_secret)
登录:
修改密码:
或
mysql> use mysql;
mysql> update user set authentication_string=password('redhat') where User='root';
mysql> flush privileges;
查看databases:
创建库:
将需要用到的命令链接到/usr/bin目录下:
[root@localhost ~]# ln -s /usr/local/mysql/bin/mysql /usr/bin/
[root@localhost ~]# ln -s /usr/local/mysql/bin/mysqladmin /usr/bin/
[root@localhost ~]# ln -s /usr/local/mysql/bin/mysqldump /usr/bin/
启动时报错:
ERROR! MySQL server PID file could not be found!
my.cnf配置出错引起 ,执行命令:vi /etc/my.cnf 修改内容:
# The MySQL server
datadir=/data/mysqldb //指定的datadir路径
socket=/var/lib/mysql/mysql.sock // 为MySQL客户程序与服务器之间的本地通信指定一个套接字文件(仅适用于UNIX/Linux系统; 默认设置一般是/var/lib/mysql/mysql.sock文件)
user=mysql //指定使用mysql用户启动mysqld, mysqld默认拒绝用户使用root帐户启动
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log //错误日志路径
pid-file=/var/lib/mysql/mysql.pid // 为mysqld程序指定一个存放进程ID的文件(仅适用于UNIX/Linux系统); Init-V脚本需要使用这个文件里的进程ID结束mysqld进程。
第一次启动mysql须初始化mysql权限表,否则没有socket文件无法启动
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysqldb