下载地址:https://dev.mysql.com/downloads/mysql/5.7.html
安装 rz
yum install -y lrzsz
linux服务器根目录下新建文件夹:
rpm -qa | grep mysql
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.60-1.el7-5.x86_64
whereis mysql
find / -name mysql
cat /etc/group | grep mysql
cat /etc/passwd |grep mysql
groupadd mysql
useradd -r -g mysql mysql
tar -zxvf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz -C /usr/local/soft
mv mysql-5.7.36-linux-glibc2.12-x86_64/ mysql5.7
chown -R mysql:mysql /usr/local/soft/mysql5.7
chmod -R 755 /usr/local/soft/mysql5.7
./mysqld --initialize --user=mysql --datadir=/data/db/mysql5.7/data --basedir=/usr/local/soft/mysql5.7
[client]
#password = your_password
port = 3306
socket = /tmp/mysql.sock
[mysqld]
## skip-grant-tables
port = 3306
socket = /tmp/mysql.sock
datadir = /data/db/mysql57/data
default_storage_engine = InnoDB
performance_schema_max_table_instances = 400
table_definition_cache = 400
skip-external-locking
key_buffer_size = 64M
max_allowed_packet = 100G
table_open_cache = 256
sort_buffer_size = 1M
net_buffer_length = 4K
read_buffer_size = 1M
read_rnd_buffer_size = 256K
myisam_sort_buffer_size = 16M
thread_cache_size = 32
query_cache_size = 32M
tmp_table_size = 64M
sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
explicit_defaults_for_timestamp = true
#skip-name-resolve
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535
log-bin=mysql-bin
binlog_format=mixed
server-id = 1
expire_logs_days = 10
slow_query_log=1
slow-query-log-file=/data/db/mysql57/log/mysql-slow.log
long_query_time=3
#log_queries_not_using_indexes=on
early-plugin-load = ""
innodb_data_home_dir = /data/db/mysql57/data
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /data/db/mysql57/data
innodb_buffer_pool_size = 256M
innodb_log_file_size = 128M
innodb_log_buffer_size = 32M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
innodb_max_dirty_pages_pct = 90
innodb_read_io_threads = 2
innodb_write_io_threads = 2
[mysqldump]
quick
max_allowed_packet = 500M
user=ltkj
password="Fj!Oc>q5C/>o"
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 64M
sort_buffer_size = 1M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
chmod -R 775 /etc/my.cnf
1)、查询服务
ps -ef | grep mysql
ps -ef | grep mysqld
https://my.oschina.net/u/4984817/blog/5543878
环境变量,后面有创建软连接方式
创建软连接、为了避免在使用 MySQL 时总是输入客户端程序的路径名,将/usr/local/mysql/bin 目录添加到PATH变量中
vim /etc/bashrc
在文件头部加上如下代码后
保存退出
vim /etc/bashrc
export PATH=$PATH:/usr/local/mysql/bin
# 刷新文件,使配置生效
source /etc/bashrc
或者:
ln -s /usr/local/soft/mysql57/bin/mysql /usr/bin
systemctl restart mysqld.service
查看mysql服务状态
systemctl status mysqld.service
grep 'temporary password' /var/log/mysqld.log
mysql -u root -p
然后修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '~1QAZxsw2'
修改允许远程连接
use mysql;
update user set Host = '%' where Host = 'localhost' and User='root';
flush privileges;
开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
重启防火墙
firewall-cmd --reload
查看防火墙状态 显示success 即成功开启
systemctl status firewalld
查看指定端口状态 显示 success 即端口成功开启
firewall-cmd --query-port=6379/tcp
配合 my.cnf 之后使用数据库连接工具即可连接成功;
========= 防火墙操作 开放指定端口 ===============
zone -- 作用域
add-port=80/tcp -- 添加端口,格式为:端口/通讯协议
permanent -- 永久生效,没有此参数重启后失效
firewall-cmd --zone=public --add-port=3306/tcp --permanent
开启3306端口后,配合my.cnf, workbench或naivcat 就能连接到MySQL数据库了
firewall-cmd --reload
1.firewalld的基本使用
启动: systemctl start firewalld
查状态:systemctl status firewalld
停止: systemctl disable firewalld
禁用: systemctl stop firewalld
在开机时启用一个服务:systemctl enable firewalld.service
在开机时禁用一个服务:systemctl disable firewalld.service
查看服务是否开机启动:systemctl is-enabled firewalld.service
查看已启动的服务列表:systemctl list-unit-files|grep enabled
查看启动失败的服务列表:systemctl --failed
2.配置firewalld-cmd
查看版本: firewall-cmd --version
查看帮助: firewall-cmd --help
显示状态: firewall-cmd --state
查看所有打开的端口: firewall-cmd --zone=public --list-ports
更新防火墙规则: firewall-cmd --reload
查看区域信息: firewall-cmd --get-active-zones
查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
拒绝所有包:firewall-cmd --panic-on
取消拒绝状态: firewall-cmd --panic-off
查看是否拒绝: firewall-cmd --query-panic
3.那怎么开启一个端口呢
添加
firewall-cmd --zone=public(作用域) --add-port=80/tcp(端口和访问类型) --permanent(永久生效)
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload # 重新载入,更新防火墙规则
firewall-cmd --zone= public --query-port=80/tcp #查看
删除
firewall-cmd --zone= public --remove-port=80/tcp --permanent # 删除
服务操作
firewall-cmd --list-services
firewall-cmd --get-services
firewall-cmd --add-service=
firewall-cmd --delete-service=
在每次修改端口和服务后/etc/firewalld/zones/public.xml文件就会被修改,所以也可以在文件中之间修改,然后重新加载
使用命令实际也是在修改文件,需要重新加载才能生效。
4.详细使用
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.4/24" service name="http" accept' //设置某个ip访问某个服务
firewall-cmd --permanent --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.0.4/24" service name="http" accept' //删除配置
firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.0.1/2 port port=80 protocol=tcp accept' //设置某个ip访问某个端口
firewall-cmd --permanent --remove-rich-rule 'rule family=ipv4 source address=192.168.0.1/2 port port=80 protocol=tcp accept' //删除配置
firewall-cmd --query-masquerade # 检查是否允许伪装IP
firewall-cmd --add-masquerade # 允许防火墙伪装IP
firewall-cmd --remove-masquerade # 禁止防火墙伪装IP
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 # 将80端口的流量转发至8080
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.0.1 # 将80端口的流量转发至192.168.0.1
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080 # 将80端口的流量转发至192.168.0.1的8080端口
三、示例:
先查看防火墙是否开启了1521端口:
firewall-cmd --permanent --query-port=1521/tcp
打印结果如下:
no
表示没有开放1521端口,那么添加下该端口:
firewall-cmd --permanent --add-port=1521/tcp
打印结果如下:
success
重新加载防火墙策略:
firewall-cmd --reload
执行成功后,查看1521端口是否被开启:
firewall-cmd --permanent --query-port=1521/tcp
打印结果如下:
yes
https://my.oschina.net/u/4984817/blog/5611658
主机名中 ip表示只允许某个ip访问 ,%表示所有,localhost表示只允许本地访问
注意某个用户的信息中 用户名和主机名组成了一个用户,同一个用户名不同的主机名组成的是不同的用户
create user ‘用户名’@‘主机名’ identified by ‘password’;
例
create user 'username'@'%' identified by 'password';
可能会遇到密码强度问题:
mysql修改密码报错:Your password does not satisfy the current policy requirements
解决办法:
1、查看 mysql 初始的密码策略,
输入语句 “ SHOW VARIABLES LIKE ‘validate_password%’; ” 进行查看,
2、首先需要设置密码的验证强度等级,设置 validate_password_policy 的全局参数为 LOW 即可,
输入设值语句 “ set global validate_password_policy=LOW; ” 进行设值,
3、当前密码长度为 8 ,如果不介意的话就不用修改了,按照通用的来讲,设置为 6 位的密码,设置 validate_password_length 的全局参数为 6 即可,
输入设值语句 “ set global validate_password_length=6; ” 进行设值,
4、现在可以为 mysql 设置简单密码了,只要满足六位的长度即可,
输入修改语句 “ ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘123456’; ” 可以看到修改成功,表示密码策略修改成功了!!!
注:在默认密码的长度最小值为 4 ,由 大/小写字母各一个 + 阿拉伯数字一个 + 特殊字符一个,
只要设置密码的长度小于 3 ,都将自动设值为 4 ,
关于 mysql 密码策略相关参数;
1)、validate_password_length 固定密码的总长度;
2)、validate_password_dictionary_file 指定密码验证的文件路径;
3)、validate_password_mixed_case_count 整个密码中至少要包含大/小写字母的总个数;
4)、validate_password_number_count 整个密码中至少要包含阿拉伯数字的个数;
5)、validate_password_policy 指定密码的强度验证等级,默认为 MEDIUM;
关于 validate_password_policy 的取值:
0/LOW:只验证长度;
1/MEDIUM:验证长度、数字、大小写、特殊字符;
2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;
删除用户 delete from mysql.user WHERE host=’hostname’ AND user=’username’;
可以看出,user2用户已经被删除
由于直接对user表操作,执行完命令之后,需要使用
FLUSH PRIVILEGES 语句,重新加载用户权限
————————————————
修改用户名
例:把用户名root修改为xiaoming
update `mysql`.`user` set user="xiaoming" where user="root";
flush privileges;
修改密码
alter user 'xiaoming'@'localhost' identified by '123456';
flush privileges;
在这里,我决定创建一个mysql用户“bird”,我想只为db“bird_test”的特定表提供访问权限.
那么,我可以知道如何为MYSQL中的用户授予特定的表perm吗?
解决方法:
首先 上面创建了用户
GRANT USAGE ON *.* TO bird@'localhost' IDENTIFIED BY 'whateverpassword';
仅授予对bird_test数据库中siteindex表的SELECT权限
GRANT SELECT ON bird_test.siteindex TO bird@'localhost';
仅授予对bird_test数据库中whois1表的SELECT权限
GRANT SELECT ON bird_test.whois1 TO bird@'localhost';
授予bird_test数据库中每个表的所有权限
GRANT ALL PRIVILEGES ON bird_test.* TO bird@'localhost';
mysql> REVOKE ALL PRIVILEGES ON database_name.* FROM 'user_name'@'host';
注:关键字 privileges 可以省略。
撤销用户对某个数据库的部分权限
例如,收回用户对某个数据库的插入、更新、删除的权限:
mysql> REVOKE INSERT, UPDATE, DELETE ON database_name.* FROM 'user_name'@'host';
撤销用户对某个数据库的某张表的部分权限
例如,收回用户对某个数据库的某个表的插入、更新、删除的权限:
mysql> REVOKE INSERT, UPDATE, DELETE ON database_name.table_name FROM ‘user_name’@‘host’;
1
撤销用户对任何数据库的任何表的部分权限
例如,收回用户查询表数据的权限(注:任何数据库的任何表都不能查询):
mysql> REVOKE SELECT ON . FROM ‘user_name’@‘host’;
1
撤销 WITH GRANT OPTION 权限
必须使用下面的语句才能撤销 WITH GRANT OPTION 权限:
mysql> revoke all privileges,grant option from 'user_name'@'host';
注:关键词 privileges 可以省略掉。
权限表
撤销语句要和授权语句完全一致
假如你给用户 pig@% 授权的语句如下:
mysql> GRANT SELECT ON test.user TO 'pig'@'%';
那么使用如下的语句,根本无法撤销上述的查询权限(即不能撤销该用户对 test 数据库中 user 表的 SELECT 操作权限):
mysql> REVOKE SELECT ON *.* FROM 'pig'@'%';
而且使用下面的语句,还会报错:
mysql> REVOKE SELECT ON test.* FROM 'pig'@'%';
ERROR 1141 (42000): There is no such grant defined for user 'pig' on host '%'
同样地,如果你使用下面的语句给用户 pig@% 授权:
GRANT SELECT ON *.* TO 'pig'@'%';
那么使用下面的语句,根本无法撤销该用户对 test 数据库中 user 表的 SELECT 权限:
REVOKE SELECT ON test.user FROM 'pig'@'%';
———————————————
授权:
GRANT ALL PRIVILEGES ON bird_test.* TO 'birdtest'@'%';
flush PRIVILEGES;
show grants for 'birdtest';
当
REVOKE ALL PRIVILEGES ON *.* FROM 'birdtest'@'%';
flush privileges;
show grants for 'birdtest';
或 show grants for 'birdtest'@'%';
结果为: GRANT USAGE ON *.* TO 'birdtest'@'%'
时
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('space_id')
AND TABLE_SCHEMA='bird' ;