(自用 Linux下安装mysql5.7.30 + 配置安全)

安装步骤
1、检测下系统有没有自带的mysql:

yum list installed | grep mysql

如果已经有的话执行命令卸载已经安装的mysql

yum -y remove mysql-libs.x86_64

2.安装

wget http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm

如果没有wget命令可以通过如下命令安装
yum install wget -y
3、添加选择yum源:

#添加到yum源
yum localinstall mysql57-community-release-el7-7.noarch.rpm

#查看可用和默认的yum源,这里默认的就是5.7
yum repolist all | grep mysql 

4、安装mysql:

yum install mysql-community-server 

5、启动mysql:

service mysqld start 

#查看安装版本

mysqladmin --version

6、查看默认密码

grep -n password /var/log/mysqld.log

7、修改初始密码,允许远程访问

	#本地连接数据库,输入刚刚获取的密码
	mysql -u root -p
	
	#修改默认密码,默认密码后续操作会报错
	SET PASSWORD = PASSWORD('123456qwe@QWE');
	
	#选择mysql库
	use mysql;
	
	#更新权限
	update user set Host='%' where User='root';
	
	生效:
	FLUSH PRIVILEGES;

8、配置防火墙打开3306端口

systemctl start firewalld开启防火墙
#查看80端口是否开启
firewall-cmd --permanent --query-port=3306/tcp

#允许外部访问80端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent

#配置生效
systemctl restart firewalld.service

为root用户开放远程登录能力 (以下配置在上面的配置中用不上)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

配置mysql配置文件(以下配置在上面的配置中用不上)
执行 vim /etc/my.cnf 命令, 编辑这个文件 :

在/ect/my.cnf 中添加 : default-character-set=utf8

设置mysql开机启动

[root@lch software]# vim /etc/rc.local

在文件中添加 service mysqld start 即可

创建一个新的MySQL用户帐户
MySQL中的用户帐户由用户名和主机名部分组成。
要创建一个新的MySQL或MariaDB用户帐户,请运行以下命令,只需将’database_user’替换为您要创建的用户的名称即可:

CREATE USER 'database_user'@'localhost' IDENTIFIED BY 'user_password';

更改MySQL用户帐户密码

ALTER USER 'database_user'@'localhost' IDENTIFIED BY 'new_password';

列出所有MySQL用户帐户

SELECT user, host FROM mysql.user;

删除MySQL用户帐户

DROP USER 'database_user@'localhost';

授予MySQL用户帐户的权限

要通过特定数据库将用户帐户的所有权限扩大,请使用以下命令:

GRANT ALL PRIVILEGES ON database_name.* TO 'database_user'@'localhost';

要将所有权限扩展到所有数据库上的用户帐户,请使用以下命令:

GRANT ALL PRIVILEGES ON *.* TO 'database_user'@'localhost';

要通过数据库中特定的表格将所有权限提供给用户帐户,请使用以下命令:

GRANT ALL PRIVILEGES ON database_name.table_name TO 'database_user'@'localhost';

如果您只想授予特定数据库类型的用户帐户的特定权限,请执行以下操作:

GRANT SELECT, INSERT, DELETE ON database_name.* TO database_user@'localhost';

撤销MySQL用户帐户的权限

REVOKE ALL PRIVILEGES ON database_name.* TO 'database_user'@'localhost';

查看修改mysql编码方式

show variables like 'character%';

SET character_set_server=‘utf8’;
SET character_set_database = ‘utf8’;
但是这样的修改,在数据库重新启动之后,数据库编码依然会还原,

此时可以用这个命令

set global character_set_server=utf8;
Query OK, 0 rows affected

mysql单条记录存储内容大小限制设置
1.使用命令

show VARIABLES like '%max_allowed_packet%'; 查看mysql默认设置的大小,

max_allowed_packet 就是限制大小的那一条记录

2.更改设置:使用命令

 set global max_allowed_packet = 2*1024*1024*10或是在mysql配置文件my.cnf里:

设置max_allowed_packet = 20M注意:大小必须为1024的倍数,且最大为1g,修改完成后重启命令行查看是否修改成功

我使用的是mysql5.7.30
mysql遇见Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre的问题

报错
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘db_diary.t_diaryType.diaryTypeId’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

解决办法
打开navcat,

用sql查询

select @@global.sql_mode

查询出来的值为:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

去掉ONLY_FULL_GROUP_BY,重新设置值。

set @@global.sql_mode
=’STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’;

jdbc连接时使用:(解决中文乱码问题 当前使用mysql 5.7.30)

dbUrl=jdbc:mysql://203.195.161.34:3306/db_diary?	useUnicode=true&characterEncoding=UTF-8

补充:
Linux下MySQL的几个重要的目录:
  数据库目录 /var/lib/mysql/
  配置文件 /usr/share /mysql(mysql.server命令及配置文件)
  相关命令 /usr/bin(mysqladmin mysqldump等命令)
  启动脚本 /etc/rc.d/init.d/(启动脚本文件mysql的目录)

你可能感兴趣的:((自用 Linux下安装mysql5.7.30 + 配置安全))