系统 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 highly1.在mysql源码根目录下新建build:mkdir -p build2.切换build目录:cd build/3.将cmake3. 换成 cmake3.. 执行编译命令即可,不再报错三:GCC 5.3 or newer is required (-dumpversion says 4.8.5)升级GCC 要求 >5.3两种解决方法:
1. + scl (推荐用这种方式)yum install centos-release-scl -y
yum install devtoolset-7 -yscl enable devtoolset-7 bashgcc --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参考文档
2.源码升级(不推荐用这种方式)
下载好5.5http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/cd gcc-5.5.0#下载mpfr、gmp、mpc、isl等依赖包./contrib/download_prerequisites#开始编译gccmkdir build && cd build../configure --enable-checking=release --enable-languages=c,c++ --disable-multilibmake -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/mysqlmake -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 = 3306host = localhostsocket = /data/mysql1/mysql.sock[mysqld_multi]mysqld = /usr/local/mysql/bin/mysqld_safemysqladmin = /usr/local/mysql/bin/mysqladmin[mysqld1]character-set-server=utf8mb4 #utf8mb4默认编码,提示让修改成这个,优化了性能,具体没有测试bind-address = 0.0.0.0port = 3306server-id = 1innodb_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 = 100connect-timeout = 5open_files_limit = 65535back_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-cacheskip-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=SYSTEMbasedir = /usr/local/mysqldatadir = /data/mysql1socket = /data/mysql1/mysql.socklog-error = /data/mysql1/mysql.errpid-file = /data/mysql1/mysql.pidsql-mode="NO_ENGINE_SUBSTITUTION" #NO_AUTO_CREATE_USER没有了join_buffer_size = 128Msort_buffer_size = 2Mread_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这个参数来指定回滚段大少,回滚段默认就是128echo 'export PATH="$PATH:/usr/local/mysql/bin"' >> /etc/profilesource /etc/profilemysqld_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