zoukankan      html  css  js  c++  java
  • MariaDB安装及基本配置(CentOS6.9)

    数据库基础概念

    数据库(Database, DB)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。

    DBMS: Database Management System, 数据库管理系统。我们平时所说的数据库其实指DBMS.

    RDBMS: Relation Database Management System, 关系型数据库管理系统,其主要的概念:
    1. 关系:二维表,表中的行、列次序不重要;
    2. 元祖:表中的每一行,又称为一条记录
    3. 属性:表中的每一列,又称为字段
    4. 域:属性的取值范围
    5. 主键:用于唯一确定一行的一个或多个字段

    事务transaction:用户定义个一组不可分割的数据库操作序列。事务满足ACID原则:

    • A: Atomicity, 原子性。事务是一个整体,这组操作要么都没做要么都做完。如果事务失败,事务中已执行完成的操作会回滚(roolback);
    • C: Consistency, 一致性。与事务相关的所有数据库状态在事务提交后有一个期望值,事务执行完后所有的值都应该满足期望;如果部分满足部分不满足,说明事务是失败的,要回滚;
    • I: Isolation, 隔离性。事务执行过程中,处于中间状态的数据应该对其他事务不可见;
    • D: Duration, 持久性。事务一旦被提交对数据库的修改是永久性的。

    MariaDB(CentOS6.9)

    MariaDB是一种RDBMS,和MySQL一脉相承。

    yum安装

    yum源配置

    yum源可以在MariaDB相关网页获取,根据自己的系统版本选择:

    安装

    yum install mariadb-server --enablerepo=MariaDB
    # --enablerepo=MariaDB, MariaDB为使用的yum源名称
    # 我是用的操作系统版本是centOS6.9,在CentOS7中还需要安装mariadb 
    

    配置

    安全配置

    不做安全配置,任意用户都可以用root账户登录mysql,并且不需要输入密码,这是不安全的。

    # 输入当前root用户密码,刚安装完密码为空,直接回车
    Enter current password for root (enter for none):
    
    # 设置新的root账号密码
    Set root password? [Y/n] y
    New password: 
    Re-enter new password: 
    
    # MariaDB安装默认会设置一个匿名账户允许任何人登录,建议删除
    Remove anonymous users? [Y/n] y
    
    # 默认可以从远程主机使用root账户登录,建议将root账户的使用限定在本机,以确保root账户密码通过网络被获取
    Disallow root login remotely? [Y/n] y
    
    # 是否删除测试用的数据库'test',生产环境建议删除
    Remove test database and access to it? [Y/n] y
    
    # 重新加载授权表,使之前的修改生效
    Reload privilege tables now? [Y/n] y
    
    字符集配置

    为了避免中文乱码的问题建议对MariaDB的,默认字符集进行设置。修改配置文件/etc/my.cnf.d/server.cnf

    [client]
    default-character-set=utf8
    
    [mysql]
    default-character-set=utf8
    
    [mysqld]
    character-set-server=utf8
    init_connect='SET collation_connection=utf8-unicode_ci'
    init_connect='SET NAMES  utf8'
    collation-server=utf8_unicode_ci
    skip-character-set-client-handshake
    
    其他配置
    [mysqld]
    datadir = /app/data  # 数据文件存储位置,默认存在mysql账户的家目录
    innodb_file_per_table = on  # 为每个表格创建新文件
    skip_name_resolve = on  # 禁止主机名解析
    

    服务

    启动
    $ service mysql start
    
    # 查看服务是否成功启动,默认监听端口3306
    $ ss -nlt |grep 3306
    LISTEN     0      50                        *:3306                     *:*    
    
    # 查看进程
    $ ps aux |grep mysql
    root      13041  0.0  0.1  11488  1472 pts/1    S    05:31   0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/centos6.9-python.pid
    mysql     13225  0.0 10.0 732340 101216 pts/1   Sl   05:31   0:03 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/centos6.9-python.err --pid-file=/var/lib/mysql/centos6.9-python.pid --wsrep_start_position=00000000-0000-0000-0000-000000000000:-1
    root      13267  0.0  0.3 225688  3064 pts/0    S+   05:32   0:00 mysql
    root      13646  0.0  0.0 103332   844 pts/1    S+   06:54   0:00 grep mysql
    

    命令行交互式客户端程序mysql

    交换命令行的输入对大小写不敏感。

    登录 mysql -uUserName -p

    登录选项:
    -uUSERNAME: 用户名 ,默认为root
    -hHOST: 服务器主机, 默认为localhost 
    -pPASSWORD:用户的密码,默认为空密码

    当前状态 status

    可以查看当前用户、字符集等信息。

    MariaDB [mysql]> status
    --------------
    mysql  Ver 15.1 Distrib 5.5.58-MariaDB, for Linux (x86_64) using readline 5.1
    
    Connection id:      2
    Current database:   mysql
    Current user:       root@localhost
    SSL:            Not in use
    Current pager:      stdout
    Using outfile:      ''
    Using delimiter:    ;
    Server:         MariaDB
    Server version:     5.5.58-MariaDB-wsrep MariaDB Server, wsrep_25.22.r9949137
    Protocol version:   10
    Connection:     Localhost via UNIX socket
    Server characterset:    utf8
    Db     characterset:    utf8
    Client characterset:    utf8
    Conn.  characterset:    utf8
    UNIX socket:        /var/lib/mysql/mysql.sock
    Uptime:         2 hours 3 min 21 sec
    
    Threads: 1  Questions: 78  Slow queries: 0  Opens: 17  Flush tables: 2  Open tables: 41  Queries per second avg: 0.010
    --------------
    
    查看用户
    MariaDB [mysql]> show databases;    # 查看MariaDB中管理的所有数据库
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    +--------------------+
    3 rows in set (0.00 sec)
    
    MariaDB [test]> use mysql   # 选择要使用的数据库
    Database changed
    
    MariaDB [mysql]> select user(); # 查看当前用户
    +----------------+
    | user()         |
    +----------------+
    | root@localhost |
    +----------------+
    1 row in set (0.00 sec)
    
    MariaDB [mysql]> select host, user, password from user; # 查看当前系统的所有账户
    +-----------+------+-------------------------------------------+
    | host      | user | password                                  |
    +-----------+------+-------------------------------------------+
    | localhost | root | *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA |
    | 127.0.0.1 | root | *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA |
    | ::1       | root | *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA |
    +-----------+------+-------------------------------------------+
    3 rows in set (0.00 sec)
    
    MariaDB [mysql]> desc user; # 查看user表结构
    +------------------------+-----------------------------------+------+-----+---------+-------+
    | Field                  | Type                              | Null | Key | Default | Extra |
    +------------------------+-----------------------------------+------+-----+---------+-------+
    | Host                   | char(60)                          | NO   | PRI |         |       |
    | User                   | char(16)                          | NO   | PRI |         |       |
    | Password               | char(41)                          | NO   |     |         |       |
    

    user表的主键包含两个字段,‘host’和‘user’,表明mysql用户账号由这两个字段唯一确定

    用户授权

    grant PRIVS on TABLES to USERNAME@'HOSTS' identified by 'PASSWD'; # 大写的部分是自定义的

    • PRIV: 限定用户权限;all, select, insert, update, delete, create, drop, index, alter, grant, references, reload, shutdown, process, file其中一部分
    • TABLES: 用户对那些表有权限 
    1. *.* 所有库的所表
    2. db_name.*指定库的所有表
    3. db_name.tb_name: 指定库的指定表
    • HOSTS: 限定用户可以通过那些远程主机连接mysql,支持通配符

    1. % 匹配任意长度的任意字符 172.16.0.0/16 等价于 172.16.%.%

    2. _ 匹配任意单个字符

    MariaDB [mysql]> grant all on *.* to python@'192.168.129.0/24' identified by '123456';
    Query OK, 0 rows affected (0.01 sec)
    
    MariaDB [mysql]> select host, user, password from user;
    +------------------+--------+-------------------------------------------+
    | host             | user   | password                                  |
    +------------------+--------+-------------------------------------------+
    | localhost        | root   | *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA |
    | 127.0.0.1        | root   | *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA |
    | ::1              | root   | *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA |
    | 192.168.129.0/24 | python | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
    +------------------+--------+-------------------------------------------+
    4 rows in set (0.00 sec)
    
    查看用户权限 SHOW GRANTS FOR 'user'@'host';

    可以查看帮助:help show grants

    示例:

    MariaDB [mysql]> show grants;   #显示当前用户权限
    +----------------------------------------------------------------------------------------------------------------------------------------+
    | Grants for root@localhost                                                                                                              |
    +----------------------------------------------------------------------------------------------------------------------------------------+
    | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*E74858DB86EBA20BC33D0AECAE8A8108C56B17FA' WITH GRANT OPTION |
    | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION                                                                           |
    +----------------------------------------------------------------------------------------------------------------------------------------+
    2 rows in set (0.00 sec)
    
    回收权限 REVOKE priv_type, ... ON db_name.tb_name FROM 'user'@'host

    MariaDB服务进程启动时会读取mysql库中所有授权表至内存
    1. GRANT或REVOKE等执行权限操作会保存于系统表中,MariaDB的服务进程通常会自动重读授权表,使之生效
    2. 对于不能够或不能及时重读授权表的命令,可手动让MariaDB的服务进程重读授权表,在交换命令行中执行:FLUSH PRIVILEGES;

    服务器参数

    查看变量: show [global|session] variables [like Pattern]

    修改变量:set variable_assignment

    variable_assignment:
    user_var_name = expr
    | [GLOBAL | SESSION] system_var_name = expr
    | [@@global. | @@session. | @@]system_var_name = expr

    示例:

    MariaDB [mysql]> show variables like '%slow%';
    +---------------------+--------------------------------------------------------------------------------------------------------------+
    | Variable_name       | Value                                                                                                        |
    +---------------------+--------------------------------------------------------------------------------------------------------------+
    | log_slow_filter     | admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk |
    | log_slow_queries    | OFF                                                                                                          |
    | log_slow_rate_limit | 1                                                                                                            |
    | log_slow_verbosity  |                                                                                                              |
    | slow_launch_time    | 2                                                                                                            |
    | slow_query_log      | OFF                                                                                                          |
    | slow_query_log_file | centos6-slow.log                                                                                             |
    +---------------------+--------------------------------------------------------------------------------------------------------------+
    7 rows in set (0.00 sec)
    
    MariaDB [mysql]> set global slow_query_log=on;
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [mysql]> show variables like 'slow_query_log';
    +----------------+-------+
    | Variable_name  | Value |
    +----------------+-------+
    | slow_query_log | ON    |
    +----------------+-------+
    1 row in set (0.00 sec)
    
    
    参考

    [1] https://www.cnblogs.com/the-one/p/5554976.html 字符集配置





  • 相关阅读:
    MySQL隐式类型转换导致索引失效
    解决MySQL报错[Err] 1093
    二:C#对象、集合、DataTable与Json内容互转示例;
    一:Newtonsoft.Json 支持序列化与反序列化的.net 对象类型;
    Newtonsoft.Json 概述
    为什么Elasticsearch查询变得这么慢了?
    Elasticsearch 5.x 字段折叠的使用
    Elasticsearch 删除数据
    Linux环境下安装 ElasticHD
    ElasticHD Windows环境下安装
  • 原文地址:https://www.cnblogs.com/wadirum/p/7978776.html
Copyright © 2011-2022 走看看