1. 下载地址
官网下载地址: https://dev.mysql.com/downloads/mysql/
# 下载源码包
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.37.tar.gz
2.安装依赖包
2.1 安装依赖包
# 编译工具 cmake 和其他的 c 语言编译环境
yum -y install gcc gcc-c++ ncurses ncurses-devel cmake
2.2 安装 boot
# Mysql5.7 版本更新后有很多变化,安装必须要 BOOST 库
# 下载
wget https://jaist.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
# 检查文件 MD5 值是否匹配
md5sum boost_1_59_0.tar.gz
# 解压
tar -vxzf boost_1_59_0.tar.gz
mv boost_1_59_0 /usr/local/boost_1_59_0
3.编译安装
# 编译
sudo cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DMYSQL_DATADIR=/data/mysql \
-DWITH_BOOST=/usr/local/boost_1_59_0 \
-DSYSCONFDIR=/etc \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DENABLED_LOCAL_INFILE=1 \
-DEXTRA_CHARSETS=all
# 参数解释
-DCMAKE_INSTALL_PREFIX:mysql安装目录
-DMYSQL_DATADIR:数据存放目录
-DWITH_BOOST:boost源码路径
-DSYSCONFDIR:my.cnf配置文件目录
-DEFAULT_CHARSET:数据库默认字符编码
-DDEFAULT_COLLATION:默认排序规则
-DENABLED_LOCAL_INFILE:允许从本文件导入数据
-DEXTRA_CHARSETS:安装所有字符集
# 安装
sudo make -j 2 && make install
错误1
virtual memory exhausted: 无法分配内存
make[2]: *** [sql/CMakeFiles/sql.dir/geometry_rtree.cc.o] 错误 1
make[1]: *** [sql/CMakeFiles/sql.dir/all] 错误 2
make[1]: *** 正在等待未完成的任务....
[ 75%] Building CXX object libmysqld/CMakeFiles/sql_embedded.dir/__/sql/item_geofunc_buffer.cc.o
virtual memory exhausted: 无法分配内存
make[2]: *** [libmysqld/CMakeFiles/sql_embedded.dir/__/sql/item_geofunc_buffer.cc.o] 错误 1
make[2]: *** 正在等待未完成的任务....
解决方案1
# 主要原因大体上是因为内存不足,有点坑 临时使用交换分区来解决吧
sudo dd if=/dev/zero of=/swapfile bs=64M count=16
sudo mkswap /swapfile
sudo swapon /swapfile
# 在编译完成后,需运行以下代码
sudo swapoff /swapfile
sudo rm /swapfile
错误2
CMake Error at info_macros.cmake:117 (FILE):
file Internal CMake error when trying to open file:
/home/aos/software/mysql-5.7.37/Docs/INFO_BIN for writing.
Call Stack (most recent call first):
cmake/info_bin.cmake:36 (CREATE_INFO_BIN)
make[2]: *** [CMakeFiles/INFO_BIN] 错误 1
make[1]: *** [CMakeFiles/INFO_BIN.dir/all] 错误 2
make: *** [all] 错误 2
解决方案2
4.配置
4.1 配置权限
# 创建mysql数据库管理用户和组
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
# 修改权限
sudo chown -R mysql:mysql /usr/local/mysql
sudo chown -R mysql:mysql /data/mysql
sudo chmod 755 -R /data/mysql
4.2 创建 my.cnf 文件
在 /etc 目录下新建,my.cnf
[client]
port = 3306
socket = /usr/local/mysql/mysql.sock
default-character-set = utf8
[mysqld]
port = 3306
socket = /usr/local/mysql/mysql.sock
basedir = /usr/local/mysql
datadir = /data/mysql
character-set-server = utf8
collation-server = utf8_general_ci
init_connect = 'SET NAMES utf8'
server-id = 1
log-slave-updates=true
skip-external-locking
skip-name-resolve
back_log = 300
table_open_cache = 128
max_allowed_packet = 16M
read_buffer_size = 8M
read_rnd_buffer_size = 64M
sort_buffer_size = 16M
join_buffer_size = 8M
key_buffer_size = 128M
thread_cache_size = 16
log-bin = mysql-bin
binlog_format = row
######主从
log-slave-updates = true
######慢日志
slow_query_log = on
long_query_time = 1
slow_query_log_file = /data/mysql/db-slow.log
gtid_mode = ON
enforce_gtid_consistency = ON
expire_logs_days = 7
default_storage_engine = InnoDB
innodb_buffer_pool_size = 1G
innodb_data_file_path = ibdata1:10M:autoextend
innodb_file_per_table = on
innodb_write_io_threads = 4
innodb_read_io_threads = 4
innodb_thread_concurrency = 8
innodb_purge_threads = 1
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 8M
innodb_log_file_size = 512M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 60
max_connections = 5000
interactive_timeout = 28800
wait_timeout = 28800
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
symbolic-links=0
######时间参数
log_timestamps=SYSTEM
[mysqldump]
quick
max_allowed_packet = 32M
[mysql]
no-auto-rehash
default-character-set = utf8
[myisamchk]
key_buffer_size = 64M
sort_buffer_size = 64M
read_buffer = 8M
write_buffer = 8M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
log-error = /data/mysql/mysql_err.log
pid-file = /data/mysql/mysqld.pid
4.3 初始化数据库
cd /usr/local/mysql/bin/
# 不生成root密码
./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
# 生成root随机密码,在/data/mysql/mysql-error.log文件中
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
# 设置远程登录密码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
4.4 将mysql加入系统服务
cd /usr/local/mysql/support-files/
cp mysql.server /etc/init.d/mysql
# mysql加入系统服务
chkconfig --add mysql
# 开机启动
chkconfig mysql on
service mysql start
# mysql服务的启动/重启/停止
service mysql start #启动mysql服务
service mysql restart #重启mysql服务
service mysql stop #停止mysql服务
5 创建普通用户及授权
mysql -uroot -p
//输入上述步骤中设置的密码登录数据库
## 切换至mysql库
use mysql;
## 创建用户
CREATE USER 'test'@'%' IDENTIFIED BY '123456';
## 授权
GRANT select,insert,update,delete,create on test.* to 'test'@'%' ;
## 刷新权限
FLUSH PRIVILEGES;
## 查看用户
select user,host from user;
## 查看test用户权限
show GRANTS for 'test'@'%';
参考地址: www.jianshu.com/p/41ac166ef… www.51cto.com/article/665…