HOME
BLOG
TIME
FRIENDS
SAY TO ME
MOOD
TRAVELING
MariaDB 数据库的安装
2020/11/15 2.3k 10 分钟 点击

直接开始,这里是使用的最新的mariadb-10.5.4版本的,有需要的按照步骤一步一步来,有三种方法安装,yum安装,二进制包安装,源码编译安装,这里yum就不提了,直接使用yum install mariadb-server 就可以了,我们主要介绍另外两种,还有他们的多实例实现。

二进制安装MariaDB

  • 1.下载
    在mariadb.org
    mariadb-10.5.4-linux-x86_64.tar.gz
  • 2.创建用户
    useradd -r mysql -s /sbin/nologin
  • 3.解压到指定目录(必须在这)
    tar xzf mariadb-10.5.4-linux-x86_64.tar.gz -C /usr/local/
  • 4.创建软链接
    cd /usr/local
    ln -s mariadb-10.5.4-linux-x86_64/ mysql
  • 5.修改所有者
    chown -R mysql.mysql mysql/
  • 6.将启动二进制程序路径加入PATH变量
    echo ‘PATH=/usr/locat/mysql/bin:$PATH’ > /etc/profile.d/mysql.sh
  • 7.使配置文件生效
    . /etc/profile.d/mysql.sh
  • 8.创建存放数据库文件的文件夹
    建立新分区 最好是逻辑卷,强的扩展性,读取性
  • 9.把文件夹的所有者改为mysql
    chown -R mysql.mysql /MariaDB
  • 10.修改权限
    chmod 770 /MariaDB
  • **11.安装
    在/usr/local/mysql/scripts
    有一个mysql_install_db
    mysql_install_db –help 查看帮助
    需要加最重要的两项

–datadir=数据库安装路径
–user=mysql
需要注意如果在/usr/local/mysql/scripts/路径下执行:
./mysql_install_db –datadir=/MariaDB –user=mysql
会有错误
只能返回到
/usr/local/mysql目录下来执行
scripts/mysql_install_db –datadir=/MariaDB –user=mysql
如果这里有报错
./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
需要安装libaio库文件
yum install -y libaio
然后执行
scripts/mysql_install_db –datadir=/MariaDB –user=mysql
就会是OK了**

  • 12.修改配置文件
    进入/usr/local/mysql/support-files目录,根据需求拷贝不同内存大小的模版
    修改datadir=/data/mariadb
    由于版本问题 10.5到二进制安装没有模版
    自己写
    vim /etc/my.cnf
    [mysqld]
    port=3306
    datadir=/data/mariadb/
    socket=/tmp/mysql.sock
    [mysqld_safe]
    log-error=/data/mariadb/mariadb.log
    pid-file=/data/mariadb/mariadb.pid
    [client]
    port=3306
    socket=/tmp/mysql.sock
    default-character-set=utf8
  • 13.添加服务脚本
    进入/usr/local/mysql/support-files
    cp mysql.server /etc/init.d/mysqld
    Chkconfig –add mysqld
  • 14.安全初始化
    mysql_secure_installation

多实例

  • 1.安装
    yum install mariadb-server
  • 2.创建不同端口的配置文件目录
    mkdir -p /mariadb/{3306,3307,3308}
  • 3.创建每个目录下的配置文件
    mkdir /mariadb/{3306,3307,3308}/{etc,socket,pid,log,data}
  • 4.修改目录所有者和权限
    chown -R mysql.mysql /mariadb/
  • 5.生成默认数据库文件
    mysql_install_db –datadir=/mariadb/3306/data/ –user=mysql [–basedir=如果是源码编译这里需要指定安装包位置,mysql -e ‘show variables like “basedir”;’ 来查询]
    mysql_install_db –datadir=/mariadb/3307/data/ –user=mysql
    mysql_install_db –datadir=/mariadb/3308/data/ –user=mysql
  • 6.修改配置文件
    Cp /etc/my.cnf /mariadb/3306/etc/
    Cp /etc/my.cnf /mariadb/3307/etc/
    Cp /etc/my.cnf /mariadb/3308/etc/
    挨个修改
    [mysqld]
    port=3306
    datadir=/mariadb/3306/data
    socket=/mariadb/3306/socket/mysql.sock
    symbolic-links=0
    [mysqld_safe]
    log-error=/mariadb/3306/log/mariadb.log
    pid-file=/mariadb/3306/pid/mariadb.pid
  • 其他同理*
  • 7.写启动脚本
    加执行权限,因为有密码所以设置为700

    这里附上我写的简单脚本,有需要再进行修改
#!/bin/bash

port=3306
mysql_user="root"
mysql_pwd=""
cmd_path="/app/mysql/bin"
mysql_basedir="/mysqldb"
mysql_socket="${mysql_basedir}/${port}/socket/mysql.sock"
. /etc/init.d/functions

func_start_mysql() {
        if [ ! -e "${mysql_socket}" ];then
                action "Starting MySQL..."
                ${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf  &> /dev/null  &
                if [ $? -eq 0 ];then
                        action "MySQL is running..."
                else
                        action "Start failed" /bin/false
                fi
        else
                echo -e "\e[1;32mMySQL is running...\e[0m"
                #exit

        fi
}

func_stop_mysql() {
        if [ ! -e "${mysql_socket}" ];then
                echo -e "\e[1;31mMySQL is stopped...\e[0m"
                #exit
        else
                action "Stoping MySQL..."
                ${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_socket} shutdown
                if [ $? -eq 0 ];then
                        action "MySQL is stopped..."
                else
                        action "Stop failed" /bin/false
                fi
        fi
}

func_restart_mysql() {
        echo -e "\e[1;32mRestarting MySQL...\e[0m"
        func_stop_mysql
        sleep 2
        func_start_mysql
        action "MySQL is resatrt..."
}

case $1 in
start)
        func_start_mysql
        ;;
stop)
        func_stop_mysql
        ;;
restart)
        func_restart_mysql
        ;;
*)
        printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
esac

这里需要注意,在不同实例中,需要把上面的port参数进行修改,使用绝对路径,/mariadb/3306/这个脚本名称 start/restart/stop 来进行操作

  • 8.设置3306的密码为1
    /usr/bin/mysqladmin -S /mariadb/3306/socket/mysql.sock password “1”
    其他同理

查询账号密码
select user,password,host from mysql.user;
修改root密码
update mysql.user set password=password(“1”) where user=”root”;
password(“1”)的作用是把密码1加密,
删除账号密码
删除最后一行
drop user “”@centos7;
使修改生效
flush privileges;
刷新权限

编译安装

-DCMAKE_INSTALL_PREFIX=/app/mysql
-DMYSQL_DATADIR=/mysqldb/
-DSYSCONFDIR=/etc
-DMYSQL_USER=mysql
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_PARTITION_STORAGE_ENGINE=1
-DWITHOUT_MROONGA_STORAGE_ENGINE=1
-DWITH_DEBUG=0
-DWITH_READLINE=1
-DWITH_SSL=system
-DWITH_ZLIB=system
-DWITH_LIBWRAP=0
-DENABLED_LOCAL_INFILE=1
-DMYSQL_UNIX_ADDR=/app/mysql/mysql.sock
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci**

==过一会会有==
CMake Error at cmake/ssl.cmake:156 (MESSAGE):
Cannot find appropriate system libraries for SSL. Use WITH_SSL=bundled to
enable SSL support
Call Stack (most recent call first):
CMakeLists.txt:384 (MYSQL_CHECK_SSL)

– Configuring incomplete, errors occurred!
See also “/root/mariadb-10.5.4/CMakeFiles/CMakeOutput.log”.
See also “/root/mariadb-10.5.4/CMakeFiles/CMakeError.log”.

==这样的报错,需要安装依赖
yum install openssl-devel
安装好之后,按上箭头找到刚刚的命令继续执行
==

==又会遇到==
CMake Error at cmake/readline.cmake:65 (MESSAGE):
Curses library not found. Please install appropriate package,
remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.
Call Stack (most recent call first):
cmake/readline.cmake:185 (FIND_CURSES)
CMakeLists.txt:386 (MYSQL_CHECK_READLINE)
– Configuring incomplete, errors occurred!
See also “/root/mariadb-10.5.4/CMakeFiles/CMakeOutput.log”.
See also “/root/mariadb-10.5.4/CMakeFiles/CMakeError.log”.

==这样的错误
先安装包
yum install ncurses-devel
安装好之后
接着 执行
rm -f CMakeCache.txt
就可以啦==

  • 12.安装
    make && make install

  • 13.添加环境变量
    echo ‘PATH=/app/mysql/bin/:$PATH’ > etc/profile.d/mysql.sh

  • 14.生成数据库
    /app/mysql/scripts/mysql_install_db –basedir=/app/mysql –datadir=/mysqldb/data –user=mysql
    Chown -R mysql.mysql /mysqldb/data

  • 15.复制主配置文件
    cp /app/mysql/support-files目录下找一个配置文件 /etc/my.cnf
    Vim /etc/my.cnf
    添加
    datadir=/mysqldb/data
    没有模版自己写
    vim /etc/my.cnf
    [mysqld]
    port=3306
    datadir=/mysqldb/data
    socket=/app/mysql/mysql.sock
    [mysqld_safe]
    log-error=/mysqldb/mariadb.log
    pid-file=/mysqldb/mariadb.pid
    [client]
    port=3306
    socket=/app/mysql/mysql.sock
    default-character-set=utf8

  • 16.复制服务脚本
    cp /app/mysql/support-files/mysql.server /etc/init.d/mysqld

  • 17.添加到chkconfig
    Chkconfig –add mysqld

  • 18.权限处理
    chgrp -R mysql /app/mysql/
    Chmod -R 775 /app/mysql/

  • 19.启动
    service mysql start

  • 破解mysql口令
    vim /etc/my.cnf
    添加
    skip_grant_tables
    就不需要密码来
    进去数据库之后
    使用update来修改
    update mysql.user set password=password(“1”);
    使用delete来删除
    delete from mysql.user where host=”::1”;
    创建用户
    creat user yang@”192.168.1.%” indetified by ‘1’;
    规定只可以在192.168.1.0网段连接 密码为1
  • **查看连接者(进程)
    show processlist;
    mysql用户账号由两部分组成: ‘USERNAME’@’HOST‘
    说明: HOST限制此用户可通过哪些远程主机连接mysql服务器 支持使用通配符:
    % 匹配任意长度的任意字符

172.16.0.0/255.255.0.0 或 172.16.%.%
_ 匹配任意单个字符**

  • desc 查看表结构
  • 创建数据库:
  • CREATE DATABASE|SCHEMA [IF NOT EXISTS]
    ‘DB_NAME’;
    CHARACTER SET ‘character set name’ COLLATE ‘collate name’*
  • 删除数据库
    DROP DATABASE|SCHEMA [IF EXISTS] ‘DB_NAME’;
    查看支持所有字符集:SHOW CHARACTER SET;
    查看支持所有排序规则:SHOW COLLATION;
    获取命令使用帮助:
    mysql> HELP KEYWORD;
  • 查看数据库列表:
    mysql> SHOW DATABASES;
  • 创建表:CREATE TABLE
    (1) 直接创建
    (2) 通过查询现存表创建;新表会被直接插入查询而来的数据
    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,…)] [table_options]
    [partition_options] select_statement
    (3) 通过复制现存的表的表结构创建,但不复制数据
    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name { LIKE old_tbl_name | (LIKE old_tbl_name) }
    ==注意:
    Storage Engine是指表类型,也即在表创建时指明其使用的存储 引擎,同一库中不同表可以使用不同的存储引擎
    同一个库中表建议要使用同一种存储引擎类型==
    CREATE TABLE [IF NOT EXISTS] ‘tbl_name’ (col1 type1 修饰符, col2 type2 修饰符, …)
  • 字段信息*
    • col type1
    • PRIMARY KEY(col1,…) • INDEX(col1, …)
    • UNIQUE KEY(col1, …)

表选项:

  • ENGINE [=] engine_name
    SHOW ENGINES;查看支持的engine类型
  • ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT |COMPACT}
  • 获取帮助:mysql> HELP CREATE TABLE;
    查看所有的引擎:SHOW ENGINES
    查看表:SHOW TABLES [FROM db_name]
    查看表结构:DESC [db_name.]tb_name
    删除表:DROP TABLE [IF EXISTS] tb_name
    查看表创建命令:SHOW CREATE TABLE tbl_name
    查看表状态:SHOW TABLE STATUS LIKE ‘tbl_name’
    查看库中所有表状态:SHOW TABLE STATUS FROM db_name*
  • explain 用于查看SQL语句解释执行的步骤 用于语句优化,建议在客户端配置文件加
  • safe-updates 不能批量修改数据 只能使用where子句 比较安全
    或者在连接的时候使用-U选项
    mysql -uroot -p1 -U
    cat /etc/my.cnf.d/client.cnf
    [client]
    safe_updates
  • Order by 排序的时候
    asc 正序
    desc倒序
    但是排序之后会发现 NULL会排在数字前面
    这个时候使用
    order by -字段 desc;
    就会把NULL弄到后面去
  • limit 4 只显示四行
    limit 4,6 跳过前四个显示6行
数据库