mysql数据库安装和一般配置


在linux上安装mysql server,进行常规设置
简书地址

同事那里的总结拿过来自己保存一份,类似的教程太多了。

MySQL数据库安装

  1. 安装

    # 更新包索引
    sudo apt-get update
    
    # 安装
    sudo apt-get install mysql-server
    

    安装过程中会提示设置root密码。

  2. 设置

    # 执行安全脚本设置
    sudo mysql_secure_installation
    
    # 执行初始化脚本(按此方法安装不用执行)
    
    # 5.7.6之前的版本执行
    mysql_install_db
    
    # 5.7.6及后续版本执行
    mysqld --initialize
    
  3. 测试

    # 查看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用于配置客户端。

  1. 忽略大小写
# 编辑my.cnf文件
vim /etc/my.cnf

# 在[msyqld]下添加如下代码
[mysqld]
lower_case_table_names=1
  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;

  1. 设置max_allowed_package
# 编辑my.cnf文件
vim /etc/my.cnf
[mysqld]
max_allowed_packet=100M
  1. 允许远程访问

  2. 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使用修改生效

  1. 设置开机启动及禁止
# 禁止启动
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数据库的所有权限(某个数据库的所有权限):

```sql

   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’;即可。 

3、删除用户

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; 

4、修改用户密码

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’


评论
  目录