三、源码安装最新MySQL8.0.11
MySQL8.0版本比MySQL5.7要快2倍,更快的性能和大量的改进
MySQL8.0版本简介 https://www.cnblogs.com/mr7664/articles/9857621.html
3.1安装Mysql
3.1.1下载
MySQL下载地址:http://dev.mysql.com/get/Downloads/MySQL-8.0.11/mysql-8.0.11.tar.gz(建议)
流程参考2.2.1
或者
wget -c http://dev.mysql.com/get/Downloads/MySQL-8.0.11/mysql-8.0.11.tar.gz/from/http://cdn.mysql.com/
3.3.2安装相关依赖包
yum -y install wget cmake gcc gcc-c++ ncurses ncurses-devel libaio-devel openssl openssl-devel bison
3.1.3解压
cd /data/Software
(你刚才把压缩包复制到的位置)
tar -zxvf mysql-8.0.11.tar.gz
3.1.4创建存放目录
用作软件存放目录
mkdir /etc/mysql
用作数据存放目录
mkdir -p /data/mysqldata/3306
3.1.5安装前的配置,指定安装目录
跳转到刚才解压好的目录下
cd /data/Software/mysql-8.0.11
注意:这里指定了刚才创建的1软件存放目录2数据存放目录
cmake -DCMAKE_INSTALL_PREFIX=/etc/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLED_LOCAL_INFILE=ON -DWITH_INNODB_MEMCACHED=ON -DWITH_SSL=system -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DCOMPILATION_COMMENT="zsd edition" -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/tmp -DMYSQL_UNIX_ADDR=/data/mysqldata/3306/mysql.sock -DMYSQL_UNIX_ADDR=/data/mysqldata/3306/mysql.sock -DSYSCONFDIR=/data/mysqldata/3306
3.1.5编译和安装
使用SWAP创建交换分区 并 开启
dd if=/dev/zero of=/swapfile bs=64M count=16
注:block_size、number_of_block 大小可以自定义,比如 bs=64M count=16代表设置 1G 大小 SWAP 分区。
mkswap /swapfile
swapon /swapfile
如果不交换分区,可能好内存不足,出现以下情况
出现error,内存不足,使用临时分区。毕竟我的阿里云是1核+2G内存。。
make很慢,我花了1个多小时
make
make install
安装成功!
清理编译文件
make clean
关闭分区,并删除交换文件
swapoff /swapfile
rm /swapfile
结果
3.2配置MySQL环境等
3.2.1创建一个用户组mysql和其下的用户mysql
如果你想删除某用户和用户组↓
删除用户名
cd/home
vipw
删除对应用户名:wq保存
删除用户组
cd /home
vipw -s
删除对应用户组:wq!强制保存
查看用户组
cat /etc/group
vi /etc/group
再次删除:wq保存
添加用户组、用户名
groupadd mysql
useradd -g mysql mysql
3.2.2设置用户操作系统的资源限制
vi /etc/security/limits.conf
在文档底下添加
mysql soft nproc 65536
mysql hard nproc 65536
mysql soft nofile 65536
mysql hard nofile 65536
验证limit是否生效
su - mysql
ulimit -a
返回root用户,因为下面需要创建目录还有chmod给权限
su root
3.2.3创建MySQL数据目录及赋予相应权限
mkdir -p /data/mysqldata/{3306/{data,tmp,binlog,innodb_ts,innodb_log},backup,scripts}
chown -R mysql:mysql /data/mysqldata
su - mysql
3.2.4配置my.cnf文件
vi /data/mysqldata/3306/my.cnf
[client]
port = 3306
socket = /data/mysqldata/3306/mysql.sock
# The MySQL server
[mysqld]
port = 3306
user = mysql
socket = /data/mysqldata/3306/mysql.sock
pid-file = /data/mysqldata/3306/mysql.pid
basedir = /etc/mysql
datadir = /data/mysqldata/3306/data
tmpdir = /data/mysqldata/3306/tmp
open_files_limit = 60000
explicit_defaults_for_timestamp
server-id = 1203306
lower_case_table_names = 1
character-set-server = utf8
federated
#sql_mode=STRICT_TRANS_TABLES
max_connections = 1000
max_connect_errors = 100000
interactive_timeout = 86400
wait_timeout = 86400
sync_binlog=0
back_log=100
default-storage-engine = InnoDB
log_slave_updates = 1
#*********** Logs related settings ***********
log-bin = /data/mysqldata/3306/binlog/mysql-bin
binlog_format= mixed
binlog_cache_size=32m
max_binlog_cache_size=64m
max_binlog_size=512m
long_query_time = 1
log_output = FILE
log-error = /data/mysqldata/3306/mysql-error.log
slow_query_log = 1
slow_query_log_file = /data/mysqldata/3306/slow_statement.log
#log_queries_not_using_indexes
general_log = 0
general_log_file = /data/mysqldata/3306/general_statement.log
#expire-logs-days = 14
binlog_expire_logs_seconds = 1728000
relay-log = /data/mysqldata/3306/binlog/relay-bin
relay-log-index = /data/mysqldata/3306/binlog/relay-bin.index
#****** MySQL Replication New Feature*********
master-info-repository=TABLE
relay-log-info-repository=TABLE
relay-log-recovery
#*********** INNODB Specific options ***********
innodb_buffer_pool_size = 2048M
transaction-isolation=REPEATABLE-READ
innodb_buffer_pool_instances = 8
innodb_file_per_table = 1
innodb_data_home_dir = /data/mysqldata/3306/innodb_ts
innodb_data_file_path = ibdata1:2048M:autoextend
innodb_thread_concurrency = 8
innodb_log_buffer_size = 16M
innodb_log_file_size = 128M
innodb_log_files_in_group = 3
innodb_log_group_home_dir = /data/mysqldata/3306/innodb_log
innodb_flush_log_at_trx_commit = 2
innodb_max_dirty_pages_pct = 70
innodb_flush_method=O_DIRECT
[mysql]
no-auto-rehash
default-character-set=gbk
prompt = (\u@\h) [\d]>\_
3.2.5初始化MySQL
/etc/mysql/bin/mysqld --defaults-file=/data/mysqldata/3306/my.cnf --initialize --user=mysql
3.2.6启动MySQL服务
/etc/mysql/bin/mysqld_safe --defaults-file=/data/mysqldata/3306/my.cnf --user=mysql
如果卡住就Ctrl+z直接挂起
完成
查看错误日志(可忽略!!跳至3.2.7)
cat /data/mysqldata/3306/mysql-error.log
问题1:Ignoring…显示用户被忽略,权限问题(上面步骤已更改。请忽略!!)
解决:增加权限
chown -R mysql:mysql /etc/mysql
结果:没有Ignoring错误
/etc/mysql/bin/mysqld_safe --defaults-file=/data/mysqldata/3306/my.cnf --user=root
cat /data/mysqldata/3306/mysql-error.log
问题2:找不到errmsg.sys文件(my.cnf路径问题,上面的配置已改。请忽略!!)
查看文件是否存在
find / - name errmsg.sys
存在,打开my.cnf查看
解决:更改my.cnf中basedir目录
结果:错误解决
/etc/mysql/bin/mysqld_safe --defaults-file=/data/mysqldata/3306/my.cnf --user=mysql
cat /data/mysqldata/3306/mysql-error.log
问题3:找不到mysql-bin.index文件(目录和权限问题,上面步骤已更改。请忽略!!)
查找文件是否存在
find / -name mysql-bin.index
不存在…
查看my.cnf配置文件
vi /data/mysqldata/3306/my.cnf
到目录底下看看
cd /data/mysqldata/3306/
ls
没有发现binlog
解决:再执行一遍(原因是之前用mysql用户来创建目录和赋予权限没有成功)
mkdir -p /data/mysqldata/{3306/{data,tmp,binlog,innodb_ts,innodb_log},backup,scripts}
chown -R mysql:mysql /data/mysqldata
再初始化一次然后启动
/etc/mysql/bin/mysqld --defaults-file=/data/mysqldata/3306/my.cnf --initialize --user=mysql
/etc/mysql/bin/mysqld_safe --defaults-file=/data/mysqldata/3306/my.cnf --user=mysql
一直卡住因为找不到mysql.sock,直接Ctrl+z
因为是safe守护进程所以kill不掉,这里选择踢掉用户关闭。或者重连一次连接
ps -ef|grep mysql(查看pts/几)
pkill -kill -t pts/(几)
/etc/mysql/bin/mysqld_safe --defaults-file=/data/mysqldata/3306/my.cnf --user=mysql
3.2.7登陆数据库
cat /data/mysqldata/3306/mysql-error.log
显示可以连接了!
查看mysql初始密码
grep 'password' /data/mysqldata/3306/mysql-error.log
密码是root用户的
复制密码粘贴登陆
/etc/mysql/bin/mysql -u root -p
登陆成功
3.2.8修改root密码
设置为本地登录权限,使用sha256_password加密,360天密码过期
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root' PASSWORD EXPIRE INTERVAL 360 DAY;
查看user
mysql> select user,host from mysql.user;
3.2.9配置环境变量(启动直接输入mysql而不用输入一堆路径)
vi /etc/profile.d/mysql.sh
将下面这句放入新建的文件中
export PATH=$PATH:/etc/mysql/bin
执行
source /etc/profile.d/mysql.sh
3.3设置systemctl服务启动方式并开机自启动
复制mysql.server
cp /etc/mysql/support-files/mysql.server /etc/init.d/mysql
添加可执行权限
chmod +x /etc/init.d/mysql
设置开机自动启动
systemctl enable mysql
3.4设置远程访问MySQL
3.4.0如果想远程连接,需要在你的windows安装一个Navicat软件
3.4.1远程连接配置
mysql> use mysql;
mysql> select host,user,authentication_string,plugin from user;
发现所有的用户host都是显示localhost,(刚才初始化密码设的localhost)都是只有本地权限
mysql> update user set host='%' where user='root';
mysql> flush privileges;
3.4.2设置防火墙
查看防火墙状态
systemctl status firewalld
都是关闭的,配置下防火墙
启动防火墙
systemctl start firewalld
超时
关闭再使用pkill杀下进程再启动
systemctl stop firewalld
pkill -f firewalld
systemctl start firewalld
systemctl status firewalld
启动成功
查看防火墙端口开启状态
无开放端口
永久添加22、3306、80端口
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
systemctl restart firewalld
firewall-cmd --list-ports