mysql8 源码安装

系统 centos-7.6 

下载的源码包 mysql-8.0.16.tar.gz

编译安装mysql-8.0.16 遇到的问题和解决方案:
一:CMake 3.4.3 or higher is required. You are running version 2.8.12.2
要求安装cmake3这个包
需要安装扩展包,cmake3 在扩展库里面
yum install epel-release -y
yum install cmake3 -y
二:Please do not build in-source. Out-of source builds are highly
1.在mysql源码根目录下新建build:mkdir -p build
2.切换build目录:cd build/
3.将cmake3. 换成 cmake3.. 执行编译命令即可,不再报错
三:GCC 5.3 or newer is required (-dumpversion says 4.8.5)
升级GCC 要求 >5.3

两种解决方法:
1. devtoolset + scl (推荐用这种方式) 

yum install centos-release-scl -y
yum install devtoolset-7 -y
scl enable devtoolset-7 bash
gcc --version

# scl enable devtoolset-7 bash #这样是创建了一个类似子shell的,在脚本里面不介意这样用,会有问题,如果在终端安装可以

# scl enable devtoolset-7 "cmd" #运行命令

脚本中推荐使用:

#export CC=/opt/rh/devtoolset-7/root/usr/bin/gcc #脚本里可以这样定义GCC 的环境变量

其他定义,因为只需求对GCC 的版本,下面不用配置也可以

# export CPP=/opt/rh/devtoolset-7/root/usr/bin/cpp  
# export CXX=/opt/rh/devtoolset-7/root/usr/bin/c++

或者
#source /opt/rh/devtoolset-7/enable or source scl_source enable devtoolset-7

在centos的devtoolset库中 最新的为 devtoolset-7,所以我们以后可以自己改数字安装最新的版本

scl enable devtoolset-7 bash

如果使用的是zsh则使用
scl enable devtoolset-7 zsh

参考文档

http://blog.fungo.me/2016/03/centos-development-env/

2.源码升级(不推荐用这种方式)
下载好5.5
http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/
cd gcc-5.5.0
#下载mpfr、gmp、mpc、isl等依赖包
./contrib/download_prerequisites
#开始编译gcc
mkdir build && cd build
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
make -j && make install

参考文章

https://www.jianshu.com/p/36f5d3524240

注意加下面的参数
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/src/
这样编译的时候不会因为找不到BOOST包而报错
解决完上面的问题,就可以安装了

mkdir -p build

cd mysql-8.0.16/build 

cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DWITH_DEBUG=OFF \
-DENABLED_PROFILING=ON \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=ON \
-DWITH_FEDERATED_STORAGE_ENGINE=ON \
-DWITH_ARCHIVE_STORAGE_ENGINE=ON \
-DWITH_EMBEDDED_SERVER=OFF \
-DWITH_BLACKHOLE_STORAGE_ENGINE=ON \
-DWITH_UNIT_TESTS=OFF \
-DENABLE_DTRACE=OFF \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/src \
-DMYSQL_DATADIR=/data/mysql

make -j N #根据系统性能,修改N 是使用的CPU核数

make install

/usr/local/mysql/bin/mysqld \
--initialize-insecure=off
--user=mysql \
--basedir=/usr/local/mysql/ \
--datadir=/data/mysql/

修改配置文件my.cnf

参考文档

https://dev.mysql.com/doc/refman/8.0/en/server-configuration.html 

https://blog.csdn.net/vkingnew/article/details/81712250

https://blog.51cto.com/wangwei007/2296180

vim /etc/my.cnf

[client]
port = 3306
host = localhost
socket = /data/mysql1/mysql.sock
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
[mysqld1]
character-set-server=utf8mb4 #utf8mb4默认编码,提示让修改成这个,优化了性能,具体没有测试
bind-address = 0.0.0.0
port = 3306
server-id = 1
innodb_buffer_pool_size = 3G
#default_authentication_plugin=mysql_native_password

#修改使用mysql_native_password插件认证

#MySQL 8.0改了默认加密方式为caching_sha2_password

#包括你刚初始化的root用户也是这个认证加密方式,这样的结果是让你除非用新的协议驱动,例如必须用8.0自带的mysql客户端才行

#不然就连接不上数据库.这样就必然造成不兼容的情况,幸好,是可以改回旧的方式的.

#在mysql5.7环境里,虽然可以设置default_authentication_plugin来改变认证加密方式,但是一般人不会去设置.

但是,这个参数只对新授权的用户生效,旧的root密码还是用旧的方式,类似下面这样

 

max_connections = 3000
max_connect_errors = 100
connect-timeout = 5
open_files_limit = 65535
back_log = 512 #MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中
max_allowed_packet = 64M
#slow-query-log = 1
#slow-query-log-file = /data/mysql1/slow.log
#long-query-time = 1
#log_slow_admin_statements=1 #参数设置为1,而这个参数只在5.6.11后支持
#min_examined_row_limit=N #表示只有返回条数大于N才记录到慢查询
#log_queries_not_using_indexes #记录没有索引的SQL
#log_throttle_queries_not_using_indexes=N #为N后表示1分钟内该SQL最多记录N条
#log_slow_slave_statements #在从库开启慢查询语句
skip-host-cache
skip-name-resolve
#log-bin = mysql-bin
#log-bin-index = mysql-bin.index
#binlog_expire_logs_seconds=25200 #expire-logs-days参数已经没有了,取而代之的是binlog_expire_logs_seconds,单位是秒
log_timestamps=SYSTEM
basedir = /usr/local/mysql
datadir = /data/mysql1
socket = /data/mysql1/mysql.sock
log-error = /data/mysql1/mysql.err
pid-file = /data/mysql1/mysql.pid
sql-mode="NO_ENGINE_SUBSTITUTION" #NO_AUTO_CREATE_USER没有了
join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
#query_cache彻底消失了,在mysql5.7还需要手动设置为关闭,现在可以不用理会了,所以相应的两个参数就可以注释掉了
#query_cache_size=0
#query_cache_type=0
#innodb_undo_logs #不能再设置了
在mysql8.0里,undo独立表空间是默认开启的,而且值为2,也就是默认两个,但是不能设innodb_undo_logs这个参数来指定回滚段大少,回滚段默认就是128
echo 'export PATH="$PATH:/usr/local/mysql/bin"' >> /etc/profile
source /etc/profile
mysqld_multi start 1
安装完成
mysql8.0创建用户授予权限报错解决方法
CREATE USER ‘w’@’localhost’ IDENTIFIED BY ‘000000’;
GRANT ALL PRIVILEGES ON . TO ‘w’@’localhost’ IDENTIFIED BY ‘000000’;
这种语法在8.0 会报错
可见,在授权的语句中需要去掉
IDENTIFIED BY ‘password’
在mysql8.0创建用户和授权和之前不太一样.其实也不能说不一样,而是说更严格,需要先创建用户和设置密码,然后才能授权.
正确的写法是
创建用户
mysql> create user 'news'@'192.168.1.%' identified by '123news';
Query OK, 0 rows affected (0.09 sec)

删除用户

mysql> drop  user 'news'@'192.168.1.%' ;
授权用户
mysql> grant all privileges on news.* to 'news'@'192.168.1.%';
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
单独授予某种权限的写法:
GRANT SELECT ON oilsystem.input TO ‘u5’@’localhost’
刷新权限并查看权限的写法:
Use mysql;FLUSH PRIVILEGES;
另外,收回某种权限的写法是:
REVOKE select ON . FROM ‘u1’@’localhost’;
MySQL Group Replication-MGR 这个参考文档
https://blog.51cto.com/arthur376/2114026

 

转载于:https://www.cnblogs.com/centos-python/articles/10860421.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值