Linux安装mysql-5.7详细步骤

Linux安装mysql-5.7详细步骤

一、下载mysql

下载地址:https://downloads.mysql.com/archives/community/

img

二、环境配置

1、检测系统是否自带mysql

# 检测系统是否自带mysql
$ rmp -qa|grep mysql

# 如果有进行强行卸载
$ rpm -e --nodeps mysql-libs-5.1.52-1.el6_0.1.x86_64

2、检测系统是否自带mariadb

# 检测系统是否自带mariadb
$ rpm -qa|grep mariadb

# 如果有进行强行卸载
$ rpm -e --nodeps mariadb-libs-5.5.64-1.el7.x86_64

用连接工具将下载的mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz上传到linux服务器/data/software/的目录下面

三、mysql安装

1、解压mysql安装包并重命名

$ cd /data/software
# 解压文件
$ tar -zxvf mysql-5.7.28.tar.gz
# 解压完成后重命名
$ mv mysql-5.7.28-linux-glibc2.12-x86_64 mysql-5.7.28
# 剪切到安装目录
$ mv mysql-5.7.28 /usr/local/

2、检查创建mysql组

# 检查mysql组和用户是否存在
$ cat /etc/group|grep mysql
# 如果没有则创建
$ groupadd mysql
# 创建用户并且指定mysql用户组(useradd -r参数表示mysql用户是系统用户,不可用于登录系统)
$ useradd -r -g mysql mysql   

3、创建data目录并将所有者及所属组改为mysql

# 切换到mysql安装目录
$ cd /usr/local/mysql-5.7.28
# 创建data目录
$ mkdir data
# 将/usr/local/mysql-5.7.28的所有者及所属组改为mysql
$ chown -R mysql.mysql /usr/local/mysql-5.7.28

4、配置my.cnf文件

创建my_default.cnf文件

# 进入/usr/local/mysql-5.7.28/support-files目录
$ cd /usr/local/mysql-5.7.28/support-files/
# 创建
$ touch my_default.cnf
# 编辑配置
$ vim my_default.cnf

配置my_default.cnf文件

[client]
 port = 3306
 socket = /usr/local/mysql-5.7.28/data/mysql.sock
[mysqld]
 # 登录时跳过权限检查,找不到初始密码可以添加此条,修改密码前先执行flush privileges;
 # skip-grant-tables
 # 针对5.7版本执行group by字句出错问题解决
 sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
 # 一般配置选项
 basedir = /usr/local/mysql/mysql-5.7.33
 datadir = /usr/local/mysql-5.7.28/data
 port = 3306
 socket = /usr/local/mysql-5.7.28/data/mysql.sock
 # 务必配置此项,否则执行sql出错时,只能显示错误代码而不显示具体错误消息
 lc-messages-dir = /usr/local/mysql-5.7.28/share/
 # 日志存放目录
 log-error = /usr/local/mysql-5.7.28/data/mysqld.log
 # 启动进程ID记录文件
 pid-file = /usr/local/mysql-5.7.28/data/mysqld.pid
 character-set-server=utf8mb4
 back_log = 300
 max_connections = 3000
 max_connect_errors = 50
 table_open_cache = 4096
 max_allowed_packet = 32M
 #binlog_cache_size = 4M
 max_heap_table_size = 128M
 read_rnd_buffer_size = 16M
 sort_buffer_size = 16M
 join_buffer_size = 16M
 thread_cache_size = 16
 query_cache_size = 64M
 query_cache_limit = 4M
 ft_min_word_len = 8
 thread_stack = 512K
 transaction_isolation = REPEATABLE-READ
 tmp_table_size = 64M
 #log-bin=mysql-bin
 long_query_time = 6
 server_id=1
 innodb_buffer_pool_size = 256M
 innodb_thread_concurrency = 16
 innodb_log_buffer_size = 16M
 lower_case_table_names = 1

skip-grant-tables # 登录时跳过权限检查,找不到初始密码可以添加此条,修改密码前先执行 flush privileges;

详细请参考:https://www.cnblogs.com/chuanqi1995/p/11644414.html

拷贝覆盖my.cnf系统全局配置

# 拷贝覆盖my.cnf系统全局配置
$ cp my_default.cnf /etc/my.cnf

5、初始化mysql

# 退回mysql根目录
$ cd ../
# 初始化mysql
$ ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql-5.7.28/ --datadir=/usr/local/mysql-5.7.28/data/

注意: 如果报错提示,如果没有则跳过

# libaio报错提示,就安装libaio
./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or
# 安装libaio
$ yum install libaio

# libnuma报错提示,就安装libnuma
./bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
$ yum -y install numactl

初始化完成之后查看日志

cat /usr/local/mysql-5.7.28/data/mysqld.log,蓝框里的是临时密码

img

6、设置mysql开机启动

# 拷贝启动脚本至开机初始化目录
$ cp support-files/mysql.server /etc/init.d/mysql

7、启动mysql并修改root用户密码

# 启动mysql
$ service mysql start

# 进入mysql根目录
$ cd /usr/local/mysql-5.7.28
# 登录mysql,输入mysqld.log提示的密码
$ ./bin/mysql -u root -p

# 刷新mysql的系统权限相关表
mysql> flush privileges;
# 修改用户密码
mysql> set password=password('123456');
# 设置root用户拥有数据库所有权限(其实root用户默认所有权限,新创建用户可以使用)
mysql> grant all privileges on *.* to root@'%' identified by '123456';
# 刷新mysql的系统权限相关表
mysql> flush privileges;

注意:如果以上操作修改密码失败,例如报以下错误:

mysql> set password=password(‘123456’);

ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

可以通过以下方式修改密码:

# 切换mysql库
mysql> use mysql
# 通过指定库修改用户密码
mysql> update mysql.user set authentication_string=password('123456') where user='root';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1
# 刷新mysql的系统权限相关表
mysql> flush privileges;
# 退出登录
mysql> exit;

# 重新登录,密码为新改密码123456
$ ./bin/mysql -u root -p
# 如果切换数据库提示1820报错,请再次修改密码
mysql> use mysql;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
# 如果1820报错,执行下面脚本修改密码,无报错忽略
mysql> alter user 'root'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
# 如果1820报错,执行下面脚本修改密码,无报错忽略
mysql> grant all privileges on *.* to root@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

# 刷新mysql的系统权限相关表
mysql> flush privileges;
# 退出登录
mysql> exit;

# 重启mysql服务
$ service mysql restart

8、root用户添加远程访问权限

# 切换mysql库
mysql> use mysql;
# 更新root用户访问权限
mysql> update user set host='%' where user = 'root';
# 刷新mysql的系统权限相关表
mysql> flush privileges;
# 退出登录
mysql> exit;

# 重启mysql生效
$ service mysql restart

注意:

如果更改时报错:ERROR 1062 (23000): Duplicate entry ‘%-root’ for key ‘PRIMARY’,就先查询一下是否已更改,最后执行刷新。

如果报以下错误:

img

解决方法:修改MySQL的配置文件,

1、windows下找到MySQL的安装目录的my.ini文件,修改其中的配置为不启动ONLY_FULL_GROUP_BY模式,删掉带有ONLY_FULL_GROUP_BY的模式就ok了,如果没有找到my.ini文件。去系统的隐藏文件夹查看,在某个盘下输入%ProgramData%然后搜索MySQL的my.ini文件。

2、linux下找到my.cnf文件,这个是配置MySQL的文件。一般这个文件是在etc文件夹下。

vi my.cnf 编辑这个文件,然后在图示的位置上加入sql_mode = “STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER”

然后重启MySQL服务:service mysql restart

9、添加新用户并配置权限

# 登录root账户
$ ./bin/mysql -u root -p

# 添加test用户,设置密码为test2021
mysql> CREATE USER 'test'@'%' IDENTIFIED BY 'test2021';

# 授权test用户testdb库所有表操作权限
mysql> GRANT ALL PRIVILEGES ON `testdb`.* TO `test`@'%';

# 授权test用户testdb库所有表操作权限(指定密码)
mysql> GRANT ALL PRIVILEGES ON `testdb`.* TO `test`@'%' IDENTIFIED BY 'test2021';

# 授权test用户所有库所有表操作权限,并且设置登录密码为test2021
mysql> GRANT ALL PRIVILEGES ON *.* TO `test`@'%' IDENTIFIED BY 'test2021';

# 刷新mysql的系统权限相关表
mysql> flush privileges;

# 查看权限
mysql> SHOW GRANTS FOR test;

# 撤消权限
mysql> REVOKE ALL PRIVILEGES ON `testdb`.* FROM test;

# 撤销所有权限
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM test;

# 删除用户
mysql> DROP USER test;

注意: 授权语句中库名和用户不能使用单引号’’,不然报错,建议使用反引号``或者不加。

参考:

  • https://www.cnblogs.com/wendy-0901/p/12673705.html
  • https://www.cnblogs.com/chuanqi1995/p/11644414.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值