Linux 安装mysql8详细教程

最近要使用窗口函数,但是要用到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 BY '你的新密码';
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 '你的新密码';
#首次改密推荐使用本地密码插件

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 '新密码';
CREATE USER 'root'@'%' IDENTIFIED with mysql_native_password  BY '123456';
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_USERSQL模式对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 USERALTER 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 querychecking query cache for queryinvalidating query cache entriessending cached result to clientstoring result in query cacheWaiting 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模式被移除: DB2MAXDB, MSSQLMYSQL323, MYSQL40ORACLE, POSTGRESQL, NO_FIELD_OPTIONS, NO_KEY_OPTIONS, NO_TABLE_OPTIONS。它们不能再分配给sql_mode系统变量或用作mysqldump --compatible选项的允许值 。

    删除MAXDB意味着将或 的 TIMESTAMP数据类型 视为 ,而不再视为。 CREATE TABLEALTER TABLETIMESTAMPDATETIME

  • 子句 的不推荐使用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()代替。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章