Linux安装mysql-5.7详细步骤
一、下载mysql
下载地址:https://downloads.mysql.com/archives/community/
二、环境配置
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,蓝框里的是临时密码
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’,就先查询一下是否已更改,最后执行刷新。
如果报以下错误:
解决方法:修改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