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