ubuntu 14.04 源码编译mysql-5.7.17

摘要:
经过验证,如果在Linux中生成Makefile时,采用以下命令,则能够同时gbk和utf8。

环境为 Ubuntu 12.04 64 位的桌面版

编译的mysql 版本为 5.7.18

首先需要安装一下依赖包

sudo apt-get install libncurses5-dev cmake chkconfig

创建用户组和用户 mysql

groupadd  mysql
useradd -r -g mysql -s /bin/bash mysql -d /home/mysql -m

创建mysql 的目录

cd /home/
mkdirmysql
cd mysql/
mkdirdata
mkdirlog
chmod -R 777 /home/mysql

下载boost 库,从mysql 的cmake 文件中,貌似它依赖的boost 1.59.0 版本的库,所以直接download boost 源码

wget https://nchc.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz

解压boost 源码库

mkdir -p /root/source/Boost ; 
cd /root/source/Boost ; 
mv /mnt/boost_1_59_0.tar.gz ./; 
tar -zxvf ./boost_1_59_0.tar.gz ; 

创建一个build的目录,为后面编译做准备

mkdir build

如果大家想对这个编译环境做gdb 源码研读,那样作者建议大家修改一下编译的配置项,因为默认情况下,编译是打开了“编译优化”选项,导致跟踪代码时,非常的混乱,解决的方法是打开cmake的配置文件,将-O3 的选项删除

vi cmake/build_configurations/compiler_options.cmake

然后查找 "CMAKE_C_FLAGS_RELWITHDEBINFO" 和 "CMAKE_CXX_FLAGS_RELWITHDEBINFO" 两个关键字,将 "-O3" 删除

例如在84行,原来是

SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 ${COMMON_CXX_FLAGS}")

那么删除后,变成

SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${COMMON_CXX_FLAGS}")

如此类推,当然,这个步骤并非必须,大家如果希望程序未来运行速度快一点,就按照默认就好了。

编译debug 模式,除了以上方法,也可以在cmake 生成编译文件时,增加一个-DCMAKE_BUILD_TYPE=Debug 参数

进入到build 的目录,生成mysql 的安装文件

cd /opt/mysql-5.6.23/build
sudo cmake ../-DCMAKE_INSTALL_PREFIX=/usr/local/mysql 
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock 
-DDEFAULT_CHARSET=utf8 
-DDEFAULT_COLLATION=utf8_general_ci 
-DWITH_EXTRA_CHARSETS:STRING=utf8,gbk 
-DWITH_MYISAM_STORAGE_ENGINE=1-DWITH_INNOBASE_STORAGE_ENGINE=1-DWITH_READLINE=1-DENABLED_LOCAL_INFILE=1-DMYSQL_DATADIR=/home/mysql/data 
-DWITH_BOOST=/root/source/Boost/boost_1_59_0 

经过测试发现,如果在Linux 中生成 Makefile 文件时,DEFAULT_CHARSET 参数只指定 “utf8”,则编译后的mysql 可执行文件不能够支持gbk 字符集。

经过验证,如果在Linux中生成Makefile时,采用以下命令,则能够同时gbk和utf8。

sudo cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql 
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock 
-DDEFAULT_CHARSET=utf8-DDEFAULT_COLLATION=utf8_general_ci-DWITH_EXTRA_CHARSETS:STRING=utf8,gbk 
-DWITH_MYISAM_STORAGE_ENGINE=1-DWITH_INNOBASE_STORAGE_ENGINE=1-DWITH_READLINE=1-DENABLED_LOCAL_INFILE=1-DMYSQL_DATADIR=/home/mysql/data 
-DWITH_BOOST=/root/software/mysql-5.7.18/boost/boost_1_59_0

编译安装mysql

make && make install

部署mysql服务

cd /usr/local/mysql/; 
cp support-files/my-default.cnf ./my.cnf ; 
cp support-files/mysql.server ./mysqld ;

将 mysqld 文件 拷贝到 /etc/init.d 目录,为了下面为操作系统添加一个 service 服务

cp /usr/local/mysql/mysqld /etc/init.d/

添加一个mysqld 的service 服务

update-rc.d mysqld defaults

随便说一下,如果删除这个mysqld 服务,可以执行以下命令

update-rc.d mysqld remove

如果是想设置开机自启动,可以参考sysv-rc-conf 命令

初始化一下 mysql 的data 目录,初始化之后,会在屏幕上输出一个临时的密码,但是由于我们拥有mysql 的更高权限,所以可以忽略它,通过其他方式来修改root 密码。

/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/home/mysql/data

启动mysql 无鉴权服务

bin/mysqld_safe --user=mysql --skip-grant-tables --skip-networking &

登陆mysql shell,设置一个root 密码

/usr/local/mysql/bin/mysql -uroot
SQL> update mysql.user set authentication_string=PASSWORD('mysql') where user='root';

停止刚才的mysql 服务,然后正常启动mysql 服务

service mysqld stop;
service mysqld start;

再使用mysql shell 登陆

/usr/local/mysql/bin/mysql -uroot -pmysql

还需要再设置一次密码,就能够正常访问

mysql> set password= password('mysql');

在 mysql 上创建一个database,名为"foo",并且指定字符集为“utf8”

CREATE DATABASE IF NOT EXISTS foo DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

如果希望创建的database 字符集为 “gbk”,则命令如下

create database if not exists DATABASENAME DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

如果希望mysql 服务可以允许其他客户端远程登陆以 root 用户登陆进来,需要执行以下命令

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mysql' WITH GRANT OPTION;

mysql 是指登陆的密码,用户可以根据自己的需要修改,这里我只是用习惯性的填写为 “mysql” 而已

通过源码编译、安装的mysql服务,默认配置文件my.cnf 在 /etc/mysql/my.cnf 目录下。

mysql 服务的运行日志默认在 /var/log/mysql/error.log 路径下

配置mysql

参考博客:

https://blog.phpha.com/archives/1685.html

https://dev.mysql.com/doc/refman/5.7/en/installing-source-distribution.html

http://xiaorui.cc/2016/01/20/mac%E4%B8%8B%E5%AE%89%E8%A3%85mysql5-7%E9%81%87%E5%88%B0%E9%BB%98%E8%AE%A4%E5%AF%86%E7%A0%81%E7%9A%84%E5%A4%A7%E5%9D%91/

http://blog.csdn.net/xitong2012/article/details/7282448

免责声明:文章转载自《ubuntu 14.04 源码编译mysql-5.7.17》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# Task的用法[CF1036C]Classy Numbers下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

001.mysql安装(lnmp)

mysql官方网站:http://dev.mysql.com/downloads/ Linux环境:刚安装的32位的“最小化安装“的CentOS 6.7 mysql版本:本次实验安装的是mysql5.1,基于32位操作系统,此次下载的为二进制免编译包。安装环境为32位CentOS 6.7 搜狐开源镜像站点:http://mirrors.sohu.com/,...

mysql全文检索

mysql到版本3.23.23时,开始支持全文检索,通过语句SELECT ... FROM ... MATCH(...) AGAINST(...) 来在整个表中检索是否有匹配的,全文索引是一个定义为fulltext的类型索引,应用在myisam表中。值得一提的是对于一个大的数据库来说,把数据装载到一个没有fulltext索引的表中,然后再添加索引,这样速度...

如何监控MYSQL消耗服务器资源

http://258xiaolei-sina-com.iteye.com/blog/764665 启动Mysql时加参数--log-slow-queries来记录执行时间超过long_query_time秒的sql MySQL 自带 slow log 的分析工具 mysqldumpslow。 slow log 是 MySQL 根据 SQL 语句的执行时...

cygwin编译环境小记

[gcc] 预定义宏 编译器通常会根据平台和编译选项的不同,为被编译的程序提供不同的预定义的宏, 例如WIN32 WIN64 LINUX, 例如DEBUG, RELEASE. 1. 在使用gcc/g++编译器时,可以通过以下命令打印出编译器预编译的宏。 gcc -dM -E - < /dev/null 用户自定义宏 除了预定义宏,编译器还允许在编译时...

aix 文件大小相关查询

一、aix中查看文件夹占用空间大小 du命令默认是显示当前目录下每个文件以及每个子目录以及下属文件的大小的 用du -sg 可看出当前文件夹的大小,包括文件夹下文件和文件夹(以G为单位);用du -sgfilename 可看出当前文件夹下所有文件或文件夹的大小(以G为单位);du -sk ,du -sm 则分别以KB,MB为单位。 例子:root# ls...

利用基于Go Lang的Hugo配合nginx来打造属于自己的纯静态博客系统

Go lang无疑是目前的当红炸子鸡,极大地提高了后端编程的效率,同时有着极高的性能。借助Go语言我们 可以用同步的方式写出高并发的服务端软件,同时,Go语言也是云原生第一语言,Docker,Kubernetes等等著名的项目都是使用Go语言实现的。    Hugo 是基于 Go 语言的静态网站生成器。    什么是静态网站生成器?顾名思义,就是以最快的速...