Mysql:
安装:
安装官方 yum源码

rpm -Uvh https://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm

使用Yum安装服务端及客户端 (客户端已经包含在服务端)

yum install -y mysql-community-server mysql

安装完成后查看初始密码

grep 'password' /var/log/mysqld.log

源码安装:
安装编译环境:

yum -y install gcc gcc-c++ glibc automake autoconf libtool make ncurses-devel

下载好源码包

wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.25.tar.gz
wget https://nchc.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
wget https://github.com/Kitware/CMake/releases/download/v3.14.5/cmake-3.14.5.tar.gz

先安装cmake:
yum安装:

yum install -y cmake

源码安装:
先解压,切换到解压目录,运行以下命令进行编译与安装

./bootstrap | gmake | gmake install

安装完成后查看版本检测是否安装成功

cmake -version

解压boost库到/usr/local目录,

创建mysql安装的相关目录,用户,并禁止登陆用户

mkdir -p /data/mysql/{data,tmp,binlog,logs}
groupadd mysql
useradd mysql -s /bin/nologin -M -g mysql

解压mysql源码包,并切换到该目录运行以下命令进行编译及安装

cmake . -DOMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql/data \
-DMYSQL_UNIX_ADDR=/data/mysql/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \
-DENABLED_LOCALINFILE=ON \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT__EXAMPLE_STORAGE_ENGINE=1 \
-DWITHOUT_PARTITION_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_DEBUG=0 \
-DWITH_BOOST=/usr/local/boost && make install

初始化mysql
将安装目录及配置文件/etc.my.cnf的所有者及组更改为mysql

chown -R mysql:mysql /data/mysql
chown -R mysql:mysql /etc/my.cnf

修改/etc/my.cnf配置文件,修改前请备份,此配置文件为非必须配置,可根据需求修改

[client]
port = 3306
socket = /tmp/mysql.sock

[mysqld]
port = 3306
socket = /tmp/mysql.sock
user = mysql

basedir = /usr/local/mysql
datadir = /data/mysql/data
pid-file = /data/mysql/mysql.pid

log_error = /data/mysql/mysql-error.log
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/mysql/mysql-slow.log

skip-external-locking
key_buffer_size = 32M
max_allowed_packet = 1024M
table_open_cache = 128
sort_buffer_size = 768K
net_buffer_length = 8K
read_buffer_size = 768K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
thread_cache_size = 16
query_cache_size = 16M
tmp_table_size = 32M
performance_schema_max_table_instances = 1000

explicit_defaults_for_timestamp = true
skip-networking
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535

log_bin=mysql-bin
binlog_format=mixed
server_id   = 232
expire_logs_days = 10
early-plugin-load = ""

default_storage_engine = InnoDB
innodb_file_per_table = 1
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 32M
sort_buffer_size = 768K
read_buffer = 2M
write_buffer = 2M

配置文件解析

[client]
#默认连接端口
port = 3306
#用于本地连接的socket套接字
socket = /database/mysql/tmp/mysql.sock
#编码
default-character-set = utf8
[mysqld]
#服务端口号,默认3306
port = 3306
#mysql 启动用户
user = mysql
#mysql安装根目录
basedir = /database/mysql
#mysql数据文件位置
datadir = /database/mysql/data
#pid文件所在目录
pid-file = /database/mysql/mysqld.pid
#为mysql客户端程序和服务器之间的本地通讯指定一个套接字文件
socket = /database/mysql/tmp/mysql.sock
#mysql存放临时文件的目录
tmpdir = /database/mysql/tmp
#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character_set_server = utf8
#mysql服务的唯一编号,每个mysql服务ID需唯一
server-id = 1
#最大连接数
max_connections = 100
#最大错误连接数
max.connect_errors = 10
#开启二进制日志功能,binlog数据位置
log-bin = /database/mysql/binlog/mysql-bin
#mysql生成的错误日志存放路径
log-error = /database/mysql/logs/mysql_5_7_25.err

初始化mysql数据库
运行安装目录的bin目录下的mysqld文件

./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data

注:到这一步很容易出问题,在初始化的时候一定要加上面的参数,而且在执行这一步操作前/data/mysql/data 这个目录必须是空的;在这里指定的basedir 和 datadir 目录必须要和/etc/my.cnf 配置的目录一直才行。

--initialize-insecure

生成初始化密码参数(5.7版本才有) ,必须要添加,否则会初始化失败,会生成空密码

-user=mysql

设定初始化用户

--basedir=/database/mysql

设定数据文件目录

--datadir=/database/mysql/data

配置ssl链接

./mysql_ssl_rsa_setup --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data

到数据目录/database/mysql/data下修改pem权限
如果不给server-key.pem其他用户和组可读权限时,当启动数据库会报以下错误
[ERROR] SSL error:Update to get private key from 'server-key.pem'
chmod +r server-key.pem

启动数据库
添加到系统服务
拷贝mysql/support-file目录下的mysql.server启动脚本到/etc/init.d 目录下,并改名为mysqld
添加PATH变量,支持mysql命令

cp support-files/mysql.server /etc/init.d/mysqld
systemctl daemon-reload
echo 'PATH=/usr/local/mysql/bin:$PATH' >>/etc/profile

mysql数据库基本优化(安全)

账户设置密码,添加额外的管理员,重新加载mysql授权表
授权zel@localhost用户拥有所有权限,并设置为管理员,注:未创建账号会自动创建

grant all privileges on . to zel@localhost identified by '0Zelt.cn' with grant option;

进入数据库后命令需要以分号结尾

启动服务并登陆数据库,不加-u参数,默认为登陆root

systemctl start mysqld
mysql -p

修改root密码,

alter user 'root'@'localhost' identified by '0Zel.com' ; #修改密码

创建一个数据库,并设置字符为utf8

create database zel character set utf8 collate utf8_bin;

查看已建立数据库

show databases;

授权数据库(权限):

grant select,insert,update,delete,create,drop,alter,index on zel. to 'zel'@'localhost' identified by '0Zel.com';
grant select,insert,update,delete,create,drop,alter,index on 库名称.
to 'test'@'localhost' identified by '密码'

该命令为赋予test用户对某个库拥有什么权限
insert输入,update更新,delete删除,create建立,drop,alter更改,index
要给IP段设置权限,把主机名修改为IP地址即可:
例如给zel用户能够使用10.0.0.0段对mysql所有库,表具有privilegs权限,管理员权限
grant all privillegs on . to zel@'10.0.0.%' identified by '0Zelt.cn' with grant option;

mysql 使用 grant 命令对账户进行授权,grant 命令常见格式如下

grant 权限 on 数据库.表名 to 账户@主机名 对特定数据库中的特定表授权

grant 权限 on 数据库.* to账户@主机名 对特定数据库中的所有表给与授权

grant 权限1,权限2,权限3 on . to 账户@主机名 对所有库中的所有表给与多个授权

grant all privileges on . to 账户@主机名 对所有库和所有表授权所有权限

授予用户最大的权限,所有的权限 grant all privileges on . to username@'%' identified by ' password';

授权完毕后刷新数据库

flash privileges;

查看用户的权限

show grants for 'zel'@'localhost';

MariaDB:
安装

yum -y install mariadb mariadb-server

如果没有软件源,请添加官方的yum源,yum源目录/etc/yum.repo.d/

[mariadb]
name = MariaDB
baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.4/centos7-amd64
gpgkey = https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1

安装完成后启动服务

systemctl start mariadb

首次运行需要进行初始化设置

mysql_secure_installation

Enter current password for root (enter for none): #输入root密码 初始无密码,直接回车即可

Switch to unix_socket authentication [Y/n] Y #是否切换到加密模式
Change the root password? [Y/n] Y #是否更改root密码
New password: #输入密码

Re-enter new password: #再次输入密码

Remove anonymous users? [Y/n] y #是否删除匿名用户
Disallow root login remotely? [Y/n]

是否允许root远程登录 按需求选择

Remove test database and access to it? [Y/n]
y #是否删除test数据库,
Reload privilege tables now? [Y/n] y #是否重新加载权限表

进入数据库,命令与mysql一样
mysql -p

设置utf8编码:
修改 /etc/my.cnf 文件,添加下列配置

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

进入数据库后,命令与mysql一样?
目前大部分一样(后期看情况修改)

修改root密码

set password =PASSWORD('密码');

创建tests数据库,并设置为utf8编码

create database tests;

进入tests数据库

use tests;

在当前数据库中创建一个test的表单

create table test(id int ,name char(32));

查看test表单是否创建成功,并查看

show tables;
desc test;

添加数据,该命令为在test表单中添加一条id跟name的数据

insert into test(id,name) values(1,'zero'),(2,'one');

然后查看test表单中的数据,

select id,name from test;

删除test中ID为2的数据

delete from test where id=2;

修改\更新test表中ID为1的数据,将name改成tests

update test set name='tests' where id=1;

权限修改与SQL一样
创建一个zero用户

create user zero@'%' identified by 'zero' ;

赋予zero对所有库拥有创建权限

`grant create on . to zero@"%" identified by 'zero';

重新登陆数据库,使用zero用户验证,验证完成后使用root删除用户
drop user zero;