mysql数据库安装和一般配置
>>>我的博客<<<
同事那里的总结拿过来自己保存一份,类似的教程太多了。
在linux上安装mysql server,进行常规设置
MySQL数据库安装
-
安装
# 更新包索引 sudo apt-get update # 安装 sudo apt-get install mysql-server
安装过程中会提示设置root密码。
-
设置
# 执行安全脚本设置 sudo mysql_secure_installation # 执行初始化脚本(按此方法安装不用执行) # 5.7.6之前的版本执行 mysql_install_db # 5.7.6及后续版本执行 mysqld --initialize
-
测试
# 查看mysql运行状态 systemctl status mysql.service # 启动Mysql sudo systemctl start mysql # 停止Mysql sudo systemctl stop mysql # 重启Mysql sudo systemctl restart mysql
MySQL数据库配置
按此种方式安装完Mysql后,配置文件默认位于/etc/msyql下,其中mysql.conf.d下的mysqld.cnf用于配置服务端,conf.d下的mysql.cnf用于配置客户端。
- 忽略大小写
# 编辑my.cnf文件
vim /etc/my.cnf
# 在[msyqld]下添加如下代码
[mysqld]
lower_case_table_names=1
- 设置编码格式为utf8mb4,并支持emoji表情
# 编辑my.cnf文件
vim /etc/my.cnf
[client]
default-character-set=utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect=’SET NAMES utf8mb4'
[mysql]
default-character-set=utf8mb4
数据库、表和字段的设置分别如下:
1) 修改database的字符集:
ALTER DATABASE 数据库名 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
示例:
ALTER DATABASE xxxdb CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
2) 步骤1)执行完成之后,需要执行use 数据库名,指明当前需要进行字符集修改的数据库;示例:use xxxdb;
3)修改table的字符集:
ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
示例:
ALTER TABLE user_comments CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
4) 修改column的字符集:
ALTER TABLE 表名 CHANGE 字段名 字段名 该字段原来的数据类型 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
示例:
ALTER TABLE user_comments CHANGE content content TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 设置max_allowed_package
# 编辑my.cnf文件
vim /etc/my.cnf
[mysqld]
max_allowed_packet=100M
- 允许远程访问
4.1 排队网络或防火墙问题
先看能否ping通远程服务器,如果不可以就是网络问题。然后,检查端口是否被防火墙挡住了
telnet ip地址 3306
如果连接失败,配置防火墙
# 防火墙放开Mysql端口
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 3306 -j ACCEPT
4.2 检查MySQL配置
如果开启了防火墙,telnet还是失败,通过netstat查看3306的端口状态
netstat -apn | grep 3306
# 返回结果
tcp6 0 0 127.0.0.1:3306 :::* LISTEN 13524/mysqld
如果显示127.0.0.1:3306表示3306被绑定到了本地。需要修改mysqld.conf
# 编辑mysqld.cnf文件
vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
bind-address=addr
不配置或者IP配置为0.0.0.0,表示监听所有客户端连接。
4.3 检查用户访问权限 MySQ建用户的时候会指定一个host,默认是127.0.0.1/localhost,那么这个用户就只能本机访问,其他机器用这个账号访问会提示没有权限,host改为%,表示允许所有机器访问。
# 登录mysql服务器
mysql -uroot -p
# 使用mysql数据库
mysql> use mysql;
Database changed
# 修改root用户访问权限
mysql> update user set host='%' where user='root';
Query OK, 0 rows affected(0.00 sec)
Row matched: 1 Changed: 0 Warnings: 0
# 查看结果
mysql> select host, user from user;
+------+-------+
|host |user |
+------+-------+
|% |root |
重启Mysql使用修改生效
- 设置开机启动及禁止
# 禁止启动
sudo systemctl disable mysqld
# 开机启动
sudo systemctl enable mysqld
MySQL用户及数据库/表权限配置
基本操作命令:
- 1、查询用户权限
show grants for username;
- 2、用户授权
grant select on db.* to username;
- 3、回收用户权限
revoke select on db.* from username;(权限不存在会报错)
1、新建用户
1.1 登录MYSQL:
root@bin>mysql -u root -p
Enter password: **********
1.2 创建用户:
mysql> insert into mysql.user(Host,User,Password) values("localhost","demo",password("1234"));
这样就创建了一个名为:demo 密码为:1234 的用户。
注意:此处的"localhost",是指该用户只能在本地登录,不能在另外一台机器上远程登录。如果想远程登录的话,将"localhost"改为"%",表示在任何一台电脑上都可以登录。也可以指定某台机器可以远程登录。
1.3 然后登录一下:
mysql>exit;
root@bin>mysql -u demo -p
Enter password: **********
2、用户授权
授权格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";
2.1 登录MYSQL(有ROOT权限),这里以ROOT身份登录:
root@bin>mysql -u demo -p
Enter password: **********
2.2 首先为用户创建一个数据库(testDB):
mysql>create database demoDB;
2.3 授权test用户拥有testDB数据库的所有权限(某个数据库的所有权限):
mysql>grant all privileges on demoDB.* to demo@localhost identified by '1234';
mysql>flush privileges;//刷新系统权限表
格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";
2.4 如果想指定部分权限给一用户,可以这样来写:
mysql>grant select,update on demoDB.* to demo@localhost identified by '1234';
mysql>flush privileges; //刷新系统权限表
2.5 授权test用户拥有所有数据库的某些权限:
mysql>grant select,delete,update,create,drop on . to demo@"%" identified by "1234";
//test用户对所有数据库都有select,delete,update,create,drop 权限。
//@"%" 表示对所有非本地主机授权,不包括localhost。(localhost地址设为127.0.0.1,如果设为真实的本地地址,不知道是否可以,没有验证。)
//对localhost授权:加上一句grant all privileges on demoDB.* to demo@localhost identified by '1234';即可。
2、删除用户
root@bin>mysql -u demo -p
Enter password: **********
mysql>Delete FROM user Where User='demo' and Host='localhost';
mysql>flush privileges;
mysql>drop database demoDB; //删除用户的数据库
删除账户及权限:>drop user 用户名@'%';
>drop user 用户名@ localhost;
2、修改用户密码
root@bin>mysql -u demo -p
Enter password: **********
mysql>update mysql.user set password=password('新密码') where User="demo" and Host="localhost";
mysql>flush privileges;
说明:grant和revoke可以在几个层次上控制访问权限
1.整个服务器:grant all /revoke all
2.整个数据库:on database.*
3.特定的表:on database.table
4.特定的列:grant select(id, se, rank) on testdb.apache_log to dba@localhost;
5.特定的存储过程:grant execute on procedure testdb.pr_add to ’dba’@’localhost’
6.特定的函数:grant execute on function testdb.fn_add to ’dba’@’localhost’