源码安装mysql

源码编译安装mysql

1 将安装mysql 所需软件包传到/opt目录下

mysql-5.7.17.tar.gz

boost_1_59_0.tar.gz #支持c++ 的运行库

 

2 安装环境依赖包

 yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
 ​
 #ncurses        #字符终端下图形互动功能的动态库
 #ncurses-devel      #ncurses开发包
 #bison          #语法分析器
 #cmake          #mysql需要用cmake编译安装

 

 

3 配置软件模块

 cd /opt/
 tar zxvf mysql-5.7.17.tar.gz
 tar zxvf boost_1_59_0.tar.gz
 ​
 mv boost_1_59_0 /usr/local/boost   #重命名
 cd /opt/mysql-5.7.17/
 cmake \
 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \   #指定mysql的安装路径
 -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ #指定mysql进程监听套接字文件(数据库连接文件)的存储路径
 -DSYSCONFDIR=/etc \                             #指定配置文件的存储路径
 -DSYSTEMD_PID_DIR=/usr/local/mysql \            #指定进程文件的存储路径
 -DDEFAULT_CHARSET=utf8  \                       #指定默认使用的字符集编码,如 utf8
 -DDEFAULT_COLLATION=utf8_general_ci \       #指定默认使用的字符集校对规则
 -DWITH_EXTRA_CHARSETS=all \                #指定支持其他字符集编码
 -DWITH_INNOBASE_STORAGE_ENGINE=1 \              #安装INNOBASE存储引擎
 -DWITH_ARCHIVE_STORAGE_ENGINE=1 \               #安装ARCHIVE存储引擎 
 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \             #安装BLACKHOLE存储引擎 
 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \            #安装FEDERATED存储引擎 
 -DMYSQL_DATADIR=/usr/local/mysql/data \         #指定数据库文件的存储路径
 -DWITH_BOOST=/usr/local/boost \          #指定boost的路径,若使用mysql-boost集成包安装则-DWITH_BOOST=boost
 -DWITH_SYSTEMD=1                #生成便于systemctl管理的文件
 ​
 ​
 #如果在CMAKE的过程中有报错,当报错解决后,需要把源码目录中的CMakeCache.txt文件删除,然后再重新CMAKE,否则错误依旧

 

存储引擎选项:

MYISAM,MERGE,MEMORY,和CSV引擎是默认编译到服务器中,并不需要明确地安装。

静态编译一个存储引擎到服务器,使用-DWITH_engine_STORAGE_ENGINE= 1

可用的存储引擎值有:ARCHIVE, BLACKHOLE, EXAMPLE, FEDERATED, INNOBASE (InnoDB), PARTITION (partitioning support), 和PERFSCHEMA (Performance Schema)

 

4 编译及安装

 make && make install
 #如果要多和编译,可以 make -j n  ,n为核数
 

 

5 创建 mysql 用户

 useradd -M -s /sbin/nologin  mysql  #创建mysql 用户,不建立家目录,不允许登录

 

 

6 修改mysql配置文件

由于系统里有位完全安装的MongoDB 数据库的配置文件,和mysql 配置文件同名,所以要先删除,然后重新创建mysql 的配置文件

 
rm -rf /etc/my.cnf
 vim /etc/my.cnf               #删除原配置项,再重新添加下面内容
 [client]                  #客户端设置
 port = 3306
 socket = /usr/local/mysql/mysql.sock      
 ​
 [mysql]                   #服务端设置
 port = 3306
 socket = /usr/local/mysql/mysql.sock
 auto-rehash                 #开启自动补全功能
 ​
 [mysqld]                  #服务全局设置
 user = mysql                    #设置管理用户
 basedir=/usr/local/mysql          #指定数据库的安装目录
 datadir=/usr/local/mysql/data       #指定数据库文件的存储路径
 port = 3306                 #指定端口3306
 character-set-server=utf8         #设置服务器字符集编码格式为utf8
 pid-file = /usr/local/mysql/mysqld.pid    #指定pid 进程文件路径
 socket=/usr/local/mysql/mysql.sock      #指定数据库连接文件
 bind-address = 0.0.0.0            #设置监听地址,0.0.0.0代表允许所有,如允许多个IP需空格隔开
 skip-name-resolve             #禁用DNS解析
 max_connections=2048            #设置mysql的最大连接数
 default-storage-engine=INNODB       #指定默认存储引擎
 max_allowed_packet=16M            #设置数据库接收的数据包大小的最大值
 server-id = 1               #指定服务ID号
 ​
 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

 


 ​

sql_mode常用值如下:

NO_ENGINE_SUBSTITUTION

如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常

STRICT_TRANS_TABLES

在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制

NO_AUTO_CREATE_USER

禁止GRANT创建密码为空的用户

NO_AUTO_VALUE_ON_ZERO

mysql中的自增长列可以从0开始。默认情况下自增长列是从1开始的,如果你插入值为0的数据会报错

NO_ZERO_IN_DATE

不允许日期和月份为零

NO_ZERO_DATE

mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告

ERROR_FOR_DIVISION_BY_ZERO

在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。默认情况下数据被零除时MySQL返回NULL

PIPES_AS_CONCAT

将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似

ANSI_QUOTES

启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符

 

7 更改mysql安装目录和配置文件的属主属组

 chown -R mysql:mysql /usr/local/mysql/
 ​
 chown mysql:mysql /etc/my.cnf
 

 

 

8 设置路径环境变量

 echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile  
 source /etc/profile
 

 

9 初始化数据库

 cd /usr/local/mysql/bin/
 ./mysqld \
 --initialize-insecure \       #生成初始化密码为空
 --user=mysql \                      #指定管理用户
 --basedir=/usr/local/mysql \        #指定数据库的安装目录
 --datadir=/usr/local/mysql/data   #指定数据库文件的存储路径

 

 

10 添加mysqld 系统服务

 cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/    #用于systemctl服务管理
 systemctl daemon-reload         #刷新识别     
 systemctl start mysqld.service  #开启服务
 systemctl enable mysqld         #开机自启动
 netstat -anpt | grep 3306       #查看端口

 

 

11 修改mysql 登录密码,并授权远程登录

 mysqladmin -u root -p password 'abc123'   #给root账号设置密码为abc123,提示输入的是原始密码(为空)
 ​
 mysql -u root -p"abc123"  #登录数据库
 grant all privileges on *.* to 'root'@'%' identified by 'abc123';
 #授予root用户可以在所有终端远程登录,使用的密码是abc123,并对所有数据库和所有表有操作权限
 show databases;     #查看当前已有的数据库
 

 

 

mysql 部署脚本

 

 #接 Apache 部分
 #配置好yum源,将包传到/opt目录下
 ​
 #!/bin/bash
 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
 yum clean all && yum makecache
 yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
 ​
 cd /opt/
 tar zxvf mysql-5.7.17.tar.gz
 tar zxvf boost_1_59_0.tar.gz
 ​
 ​
 mv boost_1_59_0 /usr/local/boost
 cd /opt/mysql-5.7.17/
 cmake \
 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
 -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
 -DSYSCONFDIR=/etc \
 -DSYSTEMD_PID_DIR=/usr/local/mysql \
 -DDEFAULT_CHARSET=utf8  \
 -DDEFAULT_COLLATION=utf8_general_ci \
 -DWITH_EXTRA_CHARSETS=all \
 -DWITH_INNOBASE_STORAGE_ENGINE=1 \
 -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
 -DMYSQL_DATADIR=/usr/local/mysql/data \
 -DWITH_BOOST=/usr/local/boost \
 -DWITH_SYSTEMD=1
 ​
 make && make install
 ​
 useradd -M -s /sbin/nologin  mysql
 ​
 cat > /etc/my.cnf <<EOF
 [client]
 port = 3306
 default-character-set=utf8
 socket=/usr/local/mysql/mysql.sock
  
 [mysql]
 port = 3306
 default-character-set=utf8
 socket = /usr/local/mysql/mysql.sock
 auto-rehash
  
 [mysqld]
 user = mysql
 basedir=/usr/local/mysql
 datadir=/usr/local/mysql/data
 port = 3306
 character-set-server=utf8
 pid-file = /usr/local/mysql/mysqld.pid
 socket=/usr/local/mysql/mysql.sock
 bind-address = 0.0.0.0
 skip-name-resolve
 max_connections=2048
 default-storage-engine=INNODB
 max_allowed_packet=16M
 server-id = 1 
 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
 EOF
 ​
 chown -R mysql:mysql /usr/local/mysql/
 ​
 chown mysql:mysql /etc/my.cnf
 ​
 echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
 source /etc/profile
 ​
 cd /usr/local/mysql/bin/
 ​
 ./mysqld \
 --initialize-insecure \
 --user=mysql \
 --basedir=/usr/local/mysql \
 --datadir=/usr/local/mysql/data
 ​
 cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
 systemctl daemon-reload
 systemctl start mysqld.service
 systemctl enable mysqld
 ​
 ​
 ​
 yum -y install expect
 source /etc/profile
 /usr/bin/expect <<-EOF
 spawn mysqladmin -u root -p password "abc123"
 expect "Enter password:" 
 send "\n"
 expect eof
 EOF
 ​
 mysql -u root -p"abc123" -e "grant all privileges on *.* to 'root'@'%' identified by 'abc123';"

 


 ​
 ​

 

上一篇:boost signal 自动释放关联对象


下一篇:codeblock 编译 SmartWin++项目 vc2010编译器 void __cdecl boost::throw_exception解决记录