最近要使用窗口函数,但是要用到mysql8版本,所以在这记录一下Linux下安装MySQL8步骤
本文以CentOS 7 为例,详细教你如何在Linux下安装MySQL-8.0.19
安装的mysql 版本是:mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz
使用root权限操作
第一步:下载
两种方式
1、
进入官网 https://dev.mysql.com/downloads/mysql/
上图显示第一个是二进制源码包,第二个是二进制测试包,第三个是源码包。我们选择第一个二进制版本的mysql是已经编译好的,无需 configure ,make make install 等步骤,只需配置一下即可使用,卸载也方便,直接删除即可。可以自行调整编译参数,最大化地定制安装结果。
下载之后,通过ssh工具sftp/ftp方式上传到你服务器centos7指定的目录即可/usr/local/
2、
在你要放置安装包的目录下执行命令:
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz
第二步:解压并移动
首先说一下,移动不是必须的,但是我后面的配置里有指定文件目录,并且在Mac上安装mysql 默认也会放到 /usr/local ,所有最好按我的来。
xz格式拓展知识: tar -Jxvf mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz
1. 解压 xz 格式文件
方法一:
需要用到两步命令:
首先利用 xz-utils 的 xz 命令将 linux-3.12.tar.xz 解压为 linux-3.12.tar,
其次用 tar 命令将 linux-3.12.tar 完全解压。
xz -d linux-3.12.tar.xz
tar -xf linux-3.12.tar
方法二(推荐)
tar -Jxf linux-3.12.tar.xz
2. 创建 xz 格式文件
方法一:
也是用到两步命令:
首先利用 tar 命令将 linux-3.12 文件夹打包成 linux-3.12.tar
其次用 xz-utils 的 xz 命令将 linux-3.12.tar 压缩成 linux-3.12.tar.xz。
tar -cf linux-3.12.tar linux-3.12/
xz -z linux-3.12.tar
方法二(推荐)
tar -Jcf linux-3.12.tar.xz linux-3.12/
解压(如果是.xz格式可以使用 tar -Jxvf mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz)
tar -zxvf mysql-8.0.19-linux-glibc2.12-x86_64.tar.gz
移动(若上传的地方不是/uar/local/路径可以用mv命令移动)
mv mysql-8.0.19-linux-glibc2.12-x86_64 /usr/local/
1 重命名(改名和软连接,二选一)
mv mysql-8.0.19-linux-glibc2.12-x86_64 mysql8
或者使用
2 想弄软连接命令 :
ln -s mysql-8.0.19-linux-glibc2.12-x86_64 mysql8
第三步:创建 用户,并给数据目录赋予权限
创建mysql组和用户
groupadd mysql useradd -r -g mysql mysql
创建mysql数据目录 / 回到根目录
cd / && mkdir -p /data/mysql8_data/
赋予权限
chown mysql:mysql -R /data/mysql8_data
chmod 750 /data/mysql8_data/ -R
为了避免在使用MySQL时总是必须键入客户端程序的路径名,可以将/usr/local/mysql/bin
目录添加到PATH
变量中:
export PATH=$PATH:/usr/local/mysql8/bin
第四步:my.cnf配置参数
创建用于初始化mysql数据库时my.cnf配置文件
默认读取配置文件的顺序:
Default options are read from the following files in the given order:
1. /etc/my.cnf 2./etc/mysql/my.cnf 3./usr/local/mysql/etc/my.cnf 4.~/.my.cnf
vim /etc/my.cnf然后 按 i 进入编辑模式,把下面内容复制进去
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
server-id = 3306
user = mysql
socket = /tmp/mysql.sock
# 设置mysql的安装目录
basedir = /usr/local/mysql8
# 设置mysql数据库的数据的存放目录
datadir = /data/mysql8_data/mysql
log-bin = /data/mysql8_data/mysql/mysql-bin
innodb_data_home_dir =/data/mysql8_data/mysql
innodb_log_group_home_dir =/data/mysql8_data/mysql
#设置mysql数据库的日志及进程数据的存放目录
log-error =/data/mysql8_data/mysql/mysql.log
pid-file =/data/mysql8_data/mysql/mysql.pid
# 服务端使用的字符集默认为8比特编码
character-set-server=utf8mb4
lower_case_table_names=1
autocommit =1
##################以上要修改的########################
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 1024
sort_buffer_size = 4M
net_buffer_length = 8K
read_buffer_size = 4M
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 64M
thread_cache_size = 128
#query_cache_size = 128M
tmp_table_size = 128M
explicit_defaults_for_timestamp = true
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535
binlog_format=mixed
binlog_expire_logs_seconds =864000
# 创建新表时将使用的默认存储引擎
default_storage_engine = InnoDB
innodb_data_file_path = ibdata1:10M:autoextend
innodb_buffer_pool_size = 1024M
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
transaction-isolation=READ-COMMITTED
[mysqldump]
quick
max_allowed_packet = 16M
[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 4M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
编辑完后 按esc 后按住 shift+: 输入 wq表示保存并退出 :wq!
第五步:初始化mysql
cd /usr/local/mysql8/bin
#一行
./mysqld --defaults-file=/usr/local/etc/my.cnf --basedir=/usr/local/mysql8 --datadir=/data/mysql8_data/mysql --user=mysql --initialize
参数说明
--defaults-file=/usr/local/etc/my.cnf 指定配置文件(一定要放在最前面,至少 --initialize 前面)
--user=mysql 指定用户(很关键)
--basedir=/usr/local/mysql/ 指定安装目录
--datadir=/usr/local/mysql/data/ 指定初始化数据目录1.1 --initialize 初始化生成临时密码 临时密码登录 mysql -u root -p 输入服务器在初始化序列期间生成的随机临时密码: 1.2 --initialize-insecure 初始化时无密码 无密码登录 mysql -u root --skip-password 2. ALTER USER 'root'@'localhost' IDENTIFIED with mysql_native_password BY '你的新密码'; flush privileges; #刷新权限 #首次改密推荐使用本地密码插件with mysql_native_password 3.创建访问用户及主机ip 如果你配置时使用了skip_name_resolve,要创建一下127.0.0.1用户及主机ip CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY '你的新密码'; 创建远程访问用户任意ip CREATE USER 'root'@'%' IDENTIFIED BY '你的新密码';
查看mysql.log初始密码,复制出来
cat /data/mysql8_data/mysql/mysql.log
第六步:启动mysql,并更改root 密码
启动
安全后台启动:(如果您的安装包含mysqld_safe,则像这样启动MySQL服务器)
bin/mysqld_safe --defaults-file=/usr/local/etc/my.cnf &
./mysqld_safe --defaults-file=/usr/local/etc/my.cnf &
如果您的安装包含systemd支持,请按以下方式启动服务器:
1. systemctl {start|stop|restart|status} mysqld
对于systemctl或 service命令,如果MySQL服务名称不是mysqld,请使用适当的名称。例如,
使用mysql而不是 mysqld在基于Debian的系统和SLES系统上使用。
修改配置文件时:
systemctl daemon-reload
systemctl restart mysqld
2. 使用与System V系统兼容的service命令(具有相反的参数):
service mysqld {start|stop|restart|status}
查看是否启动
ps -ef|grep mysql #查看mysql 进程
netstat -ano |grep "3306" #查看3306端口
更改密码
提示输入密码,把刚才临时的密码粘过来。
cd /usr/local/mysql8/bin
./mysql -u root -p
password:输入临时密码
2.无密码时登录
./mysql -u root --skip-password
然后执行修改密码与root用户,主机host ip,并刷新权限
1 修改新密码123456:
ALTER USER 'root'@'localhost' IDENTIFIED with mysql_native_password BY '你的新密码';
flush privileges; #刷新权限
#首次改密推荐使用本地密码插件with mysql_native_password
use mysql;
select user,host,plugin,authentication_string from user;
CREATE user 'root'@'%'; #创建用户任意远程访问
alter user 'root'@'%' identified with mysql_native_password by '123456'; #修改密码
grant all privileges on *.* to "root"@"%"; #给用户授权
flush privileges; #刷新权限
更改具体用户远程访问
CREATE USER 'root'@'127.0.0.1' IDENTIFIED with mysql_native_password BY '123456'; 创建'root'@'127.0.0.1'用户
flush privileges; #===> 记住刷新权限
select user,host,plugin,authentication_string from user;
===============57以后===================
update user set authentication_string=password("test") where user='root';
update mysql.user set host='你要指定的主机ip' where user='root';
============以下5.7以前======================
2 或者
SET PASSWORD = PASSWORD('123456');
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
flush privileges;
select user,host,plugin,authentication_string from user;
#退出mysql>
quit;或者exit;
#关闭mysql
shutdown;
修改MySQL用户密码
mysqladmin -u用户名 -p旧密码 password 新密码
3 或进入mysql命令行
SET PASSWORD FOR '用户名'@'主机' = PASSWORD(‘密码');
flush privileges;
添加帐户,分配特权和删除帐户
use mysql;
#创建新用户及密码
CREATE USER 'root'@'localhost' IDENTIFIED with mysql_native_password BY '新密码';
FLUSH PRIVILEGES;
CREATE USER 'root'@'%' IDENTIFIED with mysql_native_password BY '123456';
FLUSH PRIVILEGES;
CREATE USER 'mysql'@'%' IDENTIFIED with mysql_native_password BY '123456';
CREATE USER 'test'@'%' IDENTIFIED with mysql_native_password BY '123456';
#给用户授权
GRANT ALL ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;
GRANT ALL ON *.* TO 'mysql'@'%' WITH GRANT OPTION;
GRANT ALL ON *.* TO 'test'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
select user,host,plugin,authentication_string from user;
#撤消test数据库级特权
REVOKE CREATE,DROP ON test.* FROM 'test'@'%';
FLUSH PRIVILEGES;
#删除帐户
DROP USER 'test'@'%';
FLUSH PRIVILEGES;
创建远程访问新用户并授权:
use mysql;
#mysql8==>不允许<==授权并创建用户了,要分开使用
grant all privileges on *.* to '新用户名'@'%' identified by '密码' with grant option;
grant all privileges on *.* to '新用户名'@'指定ip' identified by '密码' with grant option;
例如:以前使用
grant all privileges on *.* to 'root'@'%' identified by "123456" with grant option;
mysql8分开操作为:
CREATE ROLE 'root'@'%'; #创建角色CREATE USER 'root'@'%' IDENTIFIED BY '123456';
ALTER USER 'root'@'%' IDENTIFIED with mysql_native_password by '123456'; #修改密码
grant all privileges on *.* to "root"@"%"; #给角色授权
flush privileges; #刷新权限
#另外修改主机
update mysql.user set host='具体要指定的主机ip' where user='root';
RENAME USER 'jeffrey'@'localhost' TO 'jeff'@'127.0.0.1'; #重命名
flush privileges; #刷新权限
select user,host,authentication_string from user;
注意:
1.确保用户名和密码正确
2.确保开放3306端口 并开启防火墙service iptables start
到这里就结束了,如果想退出mysql>quit或者exit ,关闭mysql 执行 service mysqld stop
创建开机自启动mysql服务
#确保my.cnf在路径/etc/my.cnf
cd /usr/local/mysql8/
cp support-files/mysql.server /etc/rc.d/init.d/mysqld #错误 unit not found
chmod +x /etc/init.d/mysql
chkconfig --add mysqld
chkconfig --level 345 mysqld on
cd /usr/local/mysql8/
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
启动:service mysqld start
停止:service mysqld stop
重启:service mysqld restart
重载配置:service mysqld reload
注意事项:
如果以上步骤有权限问题,可执行以下命令,还有把开启自起打开
出现unit not found 可以检查/etc/init.d/mysql是否存在,若否,
find / -name mysql.server
cp /usr/local/mysql8/support-files/mysql.server /etc/init.d/mysql
cp ./support-files/mysql.server /etc/init.d/mysqld
chown 777 /etc/my.cnf
chmod +x /etc/init.d/mysqld
还有在安装前如果你的系统有Mariadb,就要卸载
第一条命令用来查看,如果有就用下面的命令卸载
rpm -qa|grep mariadb
rpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64 #查询出的版本
窗口函数:
https://dev.mysql.com/doc/refman/8.0/en/window-functions.html
mysql8部分删除内容:
与帐户管理相关的以下功能已删除:
使用
GRANT
创建用户。而是使用CREATE USER
。遵循这种做法会使NO_AUTO_CREATE_USER
SQL模式对GRANT
语句不重要,因此也将其删除,并且当sql_mode
选项文件中选项的该值的存在阻止mysqld启动时,现在会将错误写入服务器日志。使用
GRANT
修改不是权限指派其他帐户属性。这包括身份验证,SSL和资源限制属性。而是在创建帐户时使用CREATE USER
或在之后使用修改这些 属性ALTER USER
。
IDENTIFIED BY PASSWORD '
auth_string
'CREATE USER
和的 语法GRANT
。而是使用 for 和 ,其中 值的格式与命名插件兼容。IDENTIFIED WITH
auth_plugin
AS 'auth_string
'CREATE USER
ALTER USER
'
auth_string
'此外,由于
IDENTIFIED BY PASSWORD
删除了语法,因此log_builtin_as_identified_by_password
系统变量是多余的,并且已删除。该
PASSWORD()
功能。此外,PASSWORD()
删除意味着 语法不再可用。SET PASSWORD ... = PASSWORD('
auth_string
')该
old_passwords
系统变量。查询缓存已删除。删除包括以下项目:
该
FLUSH QUERY CACHE
和RESET QUERY CACHE
语句。这些系统变量:
query_cache_limit
,query_cache_min_res_unit
,query_cache_size
,query_cache_type
,query_cache_wlock_invalidate
。这些状态变量:
Qcache_free_blocks
,Qcache_free_memory
,Qcache_hits
,Qcache_inserts
,Qcache_lowmem_prunes
,Qcache_not_cached
,Qcache_queries_in_cache
,Qcache_total_blocks
。这些线程状态:
checking privileges on cached query
,checking query cache for query
,invalidating query cache entries
,sending cached result to client
,storing result in query cache
,Waiting for query cache lock
。该
SQL_CACHE
SELECT
修改。这些不赞成使用的查询缓存项仍然不赞成使用,但没有效果,将在以后的MySQL版本中删除:
SQL_NO_CACHE
SELECT
修饰符。该
ndb_cache_check_time
系统变量。该
have_query_cache
系统变量保持过时,总有一个价值NO
,并会在将来的MySQL版本中删除。数据字典提供有关数据库对象的信息,因此服务器不再检查数据目录中的目录名称以查找数据库。因此,
--ignore-db-dir
选项和ignore_db_dirs
系统变量是多余的并被删除。DDL日志(也称为元数据日志)已被删除。从MySQL 8.0.3开始,此功能由数据字典
innodb_ddl_log
表处理 。请参阅 查看DDL日志。该
tx_isolation
和tx_read_only
系统变量已被删除。使用transaction_isolation
和transaction_read_only
代替。该
sync_frm
系统变量已被删除,因为.frm
文件已经过时。该
secure_auth
系统变量和--secure-auth
客户端选项已被删除。C API函数的MYSQL_SECURE_AUTH
选项mysql_options()
已删除。的
multi_range_count
系统变量被移除。该
log_warnings
系统变量和--log-warnings
服务器选项已被删除。请改用log_error_verbosity
系统变量。
sql_log_bin
系统变量 的全局范围 已删除。sql_log_bin
仅具有会话作用域,@@GLOBAL.sql_log_bin
应调整依赖于访问的应用程序 。该
metadata_locks_cache_size
和metadata_locks_hash_instances
系统变量被删除。未使用
date_format
,datetime_format
,time_format
,和max_tmp_tables
系统变量被删除。这些弃用兼容性SQL模式被移除:
DB2
,MAXDB
,MSSQL
,MYSQL323
,MYSQL40
,ORACLE
,POSTGRESQL
,NO_FIELD_OPTIONS
,NO_KEY_OPTIONS
,NO_TABLE_OPTIONS
。它们不能再分配给sql_mode
系统变量或用作mysqldump--compatible
选项的允许值 。删除
MAXDB
意味着将或 的TIMESTAMP
数据类型 视为 ,而不再视为。CREATE TABLE
ALTER TABLE
TIMESTAMP
DATETIME
子句 的不推荐使用
ASC
或DESC
限定符将GROUP BY
被删除。先前依赖于GROUP BY
排序的查询所产生的结果可能与以前的MySQL版本不同。要产生给定的排序顺序,请提供一个ORDER BY
子句。该语句的
EXTENDED
和PARTITIONS
关键字EXPLAIN
已删除。这些关键字是不必要的,因为它们的效果始终处于启用状态。这些与加密有关的项目已删除:
该
ENCODE()
和DECODE()
功能。该
ENCRYPT()
功能。的
DES_ENCRYPT()
,和DES_DECRYPT()
功能的--des-key-file
选项,have_crypt
系统变量,则DES_KEY_FILE
该选项FLUSH
语句和HAVE_CRYPT
CMake的 选项。代替删除的加密功能:对于
ENCRYPT()
,请考虑SHA2()
改为使用 单向哈希。对于其他,请考虑使用AES_ENCRYPT()
和AES_DECRYPT()
代替。