Linux之mariaDB的应用(论坛的搭建)

在mariadb的学习后,可以简单搭建一个论坛;
由于我之前已经下载了论坛文件的压缩包,这里就直接使用了

(1)下载模板Discuz_X3.2_SC_UTF8.zip

未分类

(2)解压包Discuz_X3.2_SC_UTF8.zip ##有readme,upload,utility,database四个目录

未分类

(3)cp -r upload/ /var/www/html/ ##把解压出来的upload目录复制到/var/www/html/

未分类

(4)chmod 777 /var/www/html/upload/* -R ##给目录下所有文件权限

未分类

测试:地址栏:IP/upload ##进行安装

未分类

安装

未分类

设置管理员用户密码

未分类

登录

未分类

主页

未分类

每一步都有提示,按提示安装

curl  -I   域名    域名         ##查看网站详情

baidu:

未分类

网易邮箱163:服务器采用nginx(俄罗斯的)

未分类

MariaDB基本命令

MariaDB名称来自Michael Widenius的女儿Maria的名字。MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。

1. 数据库安装并初始化

yum install mariadb-server.x86_64 -y    ##安装数据库
systemctl start mariadb         ##开启数据库服务
netstat -antlupe|grep mysql     ##查看数据库的接口信息
mysql                   ##测试能否打开数据库
vim /etc/my.cnf             ##关闭数据库对外接口
    skip-networking=1       ##在第6行添加命令(跳过网络服务)
:wq
systemctl restart mariadb       ##重启服务
netstat -antlupe|grep mysql     ##此时查看数据库端口已经关闭
mysql_secure_installation       ##数据库初始化,这里我们输入密码后全部选择y

2. MYSQL基本操作指令

mysql -uroot -p123  ##进入数据库(这里不要养成习惯因为输入密码时明文的)

1)查看****重点内容

show databases;                 ##显示数据库
use mysql;                  ##进入数据库
show tables;                    ##显示数据库中的表
select * from mysql.user;           ##查询mysql库下的user表中的数据
desc user;                  ##查看user表的数据结构
flush privileges;               ##刷新数据库信息
select host,user,password from user;        ##查询user表中的host,user,password字段
select host,user,password from user where host="::1"##查询表中字段中有关::1的数据

未分类

未分类

2)创建

create database westos;             ##创建westos数据库
use westos;                 ##进入westos数据库
create table linux(             ##创建表,user,passwd字段
user varchar(15) not null,
passwd varchar(15) not null             ##varchar可变型字符变量
 );
insert into linux values ('student','student');     ##在linux表中插入值为student student
select * from linux;                    ##查询linux中的数据

未分类

未分类

3)更改

alter table linux rename messages;          ##将linux表重命名为messages
alter table linux add age varchar(4);           ##添加age字段到linux表中
ALTER TABLE linux DROP age;             ##删除age字段
ALTER TABLE linux ADD age VARCHAR(5) AFTER name;    ##在name字段后添加字段age
ALTER TABLE linux ADD age VARCHAR(5)            
update linux set password=student where username=student;##更新linux表中user1的密码为password2

4)删除

delete from linux where username=user1;         ##删除linux表中user1的所有内容
drop table linux;                   ##删除linux表
drop database westos;                   ##删除westos数据库

5)用户授权

CREATE USER lee@localhost identified by 'lee';      ##创建用户lee密码为lee
grant select insert on  *.* to lee@localhost;   ##授权user1 密码为passwd1只能在本地 查询数据库的所以内容 
grant all on mysql.* to lee@'%' identified by 'lee2';   ##授权user2 密码为passwd2  可以从远程任意主机登录mysql 并且可以对mysql数据库任意操作
show grants for lee@localhost;          ##查看已经修改的权限;        
revoke insert on *.* from lee@localhost;    ##删除掉用户lee的添加数据权限;

6)备份

/var/lib/mysql
mysqldump -uroot -p123 westos > /mnt/mysql.sql  ##备份mysql库到mysql.bak
mysql -uroot -p123 -e "DROP database westos"
mysql -uroot -p123 westos < /mnt/mysql.sql      ##恢复mysql.bak 到westos库

7)mysql 密码恢复

/etc/init.d/mysqld stop
或者systemctl stop mariadb
mysqld_safe --skip-grant-tables &   ##跳过grant-tables授权表  不需要认证登录本地mysql数据库
update mysql.user set password=password('westos') where user='root';    ##更新mysql.user 表中条件为root用户的密码为加密westos
修改完成后
ps aux|grep mysql
kill -9 +端口号 结束所有关于mysql的进程
systemctl start mysql 

3. php-mysq

@@php -m 可以查看php所支持的服务,因为本身默认不支持mysql
所以需要安装php-mysql模块才能使用@@
phpmyadmin

yum install php php-mysql httpd mysql mysql-server  ##安装需要的服务
tar jxf phpmyadmin-*.tar.bz2 -C /var/www/html       ##将下载好的东西解压
mv phpmyadmin phpadmin                  ##重命名
cp config.sample.inc.php config.inc.php         ##复制文件
vim config.inc.php                  ##php3.4版本不需要
add 
$cfg['blowfish_secret'] = 'test';
/etc/init.d/httpd start

测试:http://172.25.254.117/phpadmin

未分类

未分类

4. discuz论坛建立

下载DISCUZ压缩包

unzip解压
cp -r upload /var/www/html/
chomd 777 /var/www/html/upload/* -R

测试:http://172.25.254.117/upload

未分类

CentOS 7安装网站环境,以及远程连接MariaDB

vps安装了CentOS 7系统,需要安装网站环境,包括php7+Apache+MariaDB,以及远程连接MariaDB。

一、准备部分

首先我们需要先打开默认的80端口,然后重启防火墙:

firewall-cmd –zone=public –add-port=80/tcp –permanent

systemctl restart firewalld.service

接下来,更新源中的软件:

yum update

到此,准备工作完成。

二、安装Apache

yum install httpd httpd-devel

一条命令就搞定了。

还有几条相关的命令需要注意,特别是开机自启动,一定要记得设置。

systemctl start httpd.service #启动apache

systemctl stop httpd.service #停止apache

systemctl restart httpd.service #重启apache

systemctl enable httpd.service #设置apache开机启动

启动Apache服务器,之前已经开启80端口,直接访问ip地址,成功显示如下:

未分类

三、安装数据库

Centos7中已经使用MariaDB替代MySQL,原因是MySQL已经被甲骨文收购,存在闭源的风险,所以作为开源的系统,为了避免不必要的麻烦,开始使用MariaDB。用户不必担心MariaDB没用过不会用的尴尬,MariaDB数据库基本上可以做到无缝兼容MySQL。下面开始安装MariaDB数据库:

yum install mariadb-server

MariaDB数据库默认root密码为空,安全起见,我们给root设置一个密码:

systemctl start mariadb.service

/usr/bin/mysql_secure_installation

接下来,将通过问答的形式进行安全设置。

首先,需要输入当前的root密码:

Enter current password for root (enter for none):

初次使用,默认密码为空,直接回车下一步。

Set root password? [Y/n]

顾名思义,设置root密码,y表示yes,n表示no,默认yes,所以可以直接回车,然后提示我们设置密码,和确认密码,输入两次即可。一定要记得自己设置的密码。

接下来,还有一些其他设置。

Remove anonymous users? [Y/n]

是否禁止匿名用户,默认选项是yes,建议默认设置,回车继续。

Disallow root login remotely? [Y/n]

是否禁止root用户远程登录。如果只在本机内访问MariaDB,建议默认设置,回车继续。如果还需要其他云主机,或者还需要使用数据库远程连接软件进行连接,则需要选择n。

Remove test database and access to it? [Y/n]

是否删除测试数据库和权限。建议默认设置,回车继续。

Reload privilege tables now? [Y/n]

是否重新加载权限表,建议默认设置,回车继续。

到此,数据库安装完成,最后一步,设置开机启动:

systemctl enable mariadb

可能会用到的一些命令:

systemctl start mariadb.service #启动MariaDB

systemctl stop mariadb.service #停止MariaDB

systemctl restart mariadb.service #重启MariaDB

systemctl enable mariadb.service #设置开机启动

四、安装PHP

虽然PHP7已经发布很久了,性能上进步很大,所以我们选择安装PHP7。

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm   –force –nodeps

yum install php70w

还需要安装一些扩展:

yum install php70w-mysql php70w-gd php70w-imap php70w-ldap php70w-odbc php70w-pear php70w-xml php70w-xmlrpc php70w-mbstring php70w-devel

安装完成!接下来进行测试。

vi /var/www/html/test.php

打开test.php文件,如果没有会自动创建一个,按i字母进入编辑模式,输入下面的内容:

<?php

phpinfo();

?>

编辑完,按Esc键退出编辑模式,并输入:wq,敲击回车保存并退出。

然后打开浏览器,输入:你的ip/test.php,看看是否显示PHP的相关信息。

如果没有成功访问,可以试试重启Apache试试。

五、远程连接MariaDB数据库

我个人习惯用navicat管理数据库,所以需要远程连接数据库,前面数据库相关设置中有一项“是否禁止root用户远程登录”,如果像我一样有这个需要,那么就需要选择n。

仅仅是选择n还是不够的,因为我们还需要给数据库开放一个端口,一般我们默认的端口是3306,按照之前开放80端口,我们再开放一个3306端口给数据库,然后再重启防火墙:

firewall-cmd –zone=public –add-port=3306/tcp –permanent

systemctl restart firewalld.service

至此,所有安装设置都完成了。

MariaDB初学者管理命令

早些时候,我们已经学会了在CentOS/RHEL 7上安装MariaDB服务器(见 http://www.linuxidc.com/Linux/2018-01/150296.htm),这个服务器现在是RHEL/CentOS 7的默认数据库。现在我们将讨论一些有用的MariaDB管理命令。 这些是一些非常基本的命令,可以让你开始使用MariaDB,这些命令也可以和MySQL一起使用,因为Mariadb只支持MySQL版本

MariaDB管理命令

检查您的MariaDB安装的版本

要检查数据库安装的当前版本,请在终端中输入以下命令

$ mysql –version

该命令为您提供当前版本的数据库。 另外你也可以运行下面提到的命令来查看详细的版本,

$ mysqladmin –u root –p version

登录到mariadb

要登录到mariadb服务器,请运行

$ mysql –u root –p

然后输入密码登录会话。

显示所有数据库

要显示你的maridb目前所有的数据库,运行

$ show databases;

在你登录到mariadb后。

创建新的数据库

要在mariadb中创建一个新的数据库,运行

$ create database linuxidc;

当登录到mariabdb。要从终端直接创建数据库,请运行

$ mysqladmin -u user -p create linuxidc

这里,linuxidc是新数据库的名称。

删除数据库

要删除数据库,请运行

$ drop database linuxidc;

从mariadb登录会话。或者你也可以使用,

$ mysqladmin –u root –p drop linuxidc

注意:如果在运行mysqladmin命令时出现“访问被拒绝”错误,那可能是因为我们没有赋予root权限。为此,请运行第7点中提到的命令,用root替换用户的名称。

创建新用户

要为数据库创建新用户,请运行

$ CREATE USER ‘linuxidc’@’localhost’ IDENTIFIED BY ‘password’;

允许用户访问数据库

为了向用户提供对单个数据库的访问,请运行

$ GRANT ALL PRIVILEGES ON test.* to ‘linuxidc’@’localhost’;

这将为用户提供完整的数据库命名测试权限。我们也可以授予用户SELECT,INSERT,DELETE权限。

为了提供对所有数据库的访问,用*即

$ GRANT ALL PRIVILEGES ON *.* to ‘linuxidc’@’localhost’;

创建数据库的备份/转储

要创建单个数据库,请从终端窗口运行以下命令,

$ mysqldump –u root –p database_name>db_backup.sql

要在单个命令中创建多个数据库的备份,

$ mysqldump –u root –p – – databases db1 db2 > db12_backup.sql

要在单个命令中创建所有数据库的转储,

$ mysqldump –u root –p – – all-databases >all_dbs.sql

从转储中恢复数据库

要从转储中恢复数据库,请运行

$ mysql –u root –p database_name<db_backup.sql

但是这个命令只有在没有以前的数据库名称相同时才能使用。如果要将数据库数据恢复到任何已经创建的数据库,我们需要使用’mysqlimport’命令,

mysqlimport –u root –p database_name<db_backup.sql

在mariadb中更改用户的密码

这个例子我们要更改“root”的密码,但是您可以使用下面的过程来更改任何用户的密码,

登录到mariadb并选择’mysql’数据库,

$ mysql –u root –p
$ use mysql;

然后运行以下,

$ update user set password=PASSWORD(‘your_new_password_here’) where User=’root’;

接下来,重新加载权限,

$ flush privileges;

然后退出会话。

这是我们的一些有用的MariaDB管理命令的教程。请在下面的评论框中留下您的意见或建议。

macOS中使用brew安装MariaDB

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB来代替MySQL的InnoDB。MariaDB由MySQL的创始人Michael Widenius主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自Michael Widenius的女儿Maria的名字。

查看MariaDB版本

brew info mariadb  

安装MariaDB

brew install mariadb  

运行数据库安装程序

分别执行下面的命令来实现安装:

unset TMPDIR  
cd /usr/local/opt/mariadb/bin/
mysql_install_db  

运行MariaDB

mysql.server start  

brew services start mariaDB

添加环境变量

vi ~/.bash_profile 

添加

export PATH=$PATH:/usr/local/opt/mariadb/bin:/usr/local/sbin/

运行生效

source ~/.bash_profile

重设root用户的密码、移除匿名用户、移除默认的test数据库等等,具体的执行和设置如下:

mysql_secure_installation

依次

Enter current password for root (enter for none):  
Set root password? [Y/n] Y  
Remove anonymous users? [Y/n] Y  
Disallow root login remotely? [Y/n] n  
Remove test database and access to it? [Y/n] Y  
Reload privilege tables now? [Y/n] Y  

连接MariaDB数据库的命令:

mysql -u root -p  

验证MariaDB版本

MariaDB [(none)]> select @@version;  

MariaDB基础命令

-- 显示数据库列表
show databases;

-- 切换到名为mysql的数据库,显示该库中的数据表
use mysql;  
show tables;

-- 显示数据表table的结构
desc table;

-- 建数据库A与删数据库A
create database `database_A`;  
drop database `database_A`;

-- 建表:
use database_A;  
create table table_A(字段列表);  
drop table table_A;

Xtrabackup 恢复Mariadb单个表

1、安装 mysql 备份工具 Percona XtraBackup

http://www.cndba.cn/leo1990/article/2488

2、恢复单个表说明

1). 针对InnoDB表恢复

2). 开启了参数innodb_file_per_table 此参数修改InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间

3、为备份建立一个只有备份权限的用户

MariaDB [(none)]> create user 'dbbackup'@'%' identified by '123456';
MariaDB [(none)]> grant reload,lock tables,replication client,create tablespace,process,super on *.* to dbbackup@'%' ;
MariaDB [(none)]> grant create,insert,select on percona_schema.* to dbbackup@'%' ;
MariaDB [(none)]> flush privileges;

4、创建一个测试,往里面插入数据后进行备份:

MariaDB [cndba]> create table test(id int);
Query OK, 0 rows affected (0.02 sec)

MariaDB [cndba]> insert into test values(10),(20),(30);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

MariaDB [cndba]> select * from tb1;
ERROR 1146 (42S02): Table 'cndba.tb1' doesn't exist
MariaDB [cndba]> select * from test;
+------+
| id   |
+------+
|   10 |
|   20 |
|   30 |
MariaDB [cndba]> show create table test/G
*************************** 1. row ***************************
       Table: test
Create Table: CREATE TABLE `test` (
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.03 sec)

如果忘记表结构可以安装工具:mysql-utilities,其中mysqlfrm可以读取表结构。

进行mysql-utilities安装:

yum install mysql-utilities -y

查看表结构

[[email protected] yum.repos.d]# mysqlfrm --diagnostic /backup/2018-01-12_00-10-40/cndba/test.frm

5、xtrabackup备份数据库

[[email protected] yum.repos.d]# innobackupex --host=localhost --user=dbbackup --password=123456 /backup/

6、准备apply-log

[[email protected] backup]# innobackupex --apply-log --export /backup/2018-01-12_00-10-40/

7 、删除表

MariaDB [cndba]> drop table test;
Query OK, 0 rows affected (0.04 sec)

MariaDB [cndba]> show create table test/G
ERROR 1146 (42S02): Table 'cndba.test' doesn't exist

8、创建表

MariaDB [cndba]> CREATE TABLE `test` ( `id` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

9、丢弃表空间

MariaDB [cndba]> ALTER TABLE test DISCARD TABLESPACE;

10、拷贝备份目录中的ibd,cfg,exp 到mysql的datadir目录

[[email protected] cndba]# cp /backup/2018-01-12_00-10-40/cndba/test.{ibd,exp,cfg} /data//mysql/cndba/
赋值权限
[[email protected] cndba]# chown -R mysql.mysql /data/mysql/cndba/

11、导入表空间

MariaDB [cndba]> alter table test import tablespace;

12、表被还原

MariaDB [cndba]> select * from test;
+------+
| id   |
+------+
|   10 |
|   20 |
|   30 |
+------+

MariaDB主从配置与MaxScale实现MySQL读写分离

MaxScale由MariaDB开发,MaxScale是插件式结构,允许用户开发适合自己的插件。

一、MaxScale插件

认证插件

提供了登录认证功能,MaxScale 会读取并缓存数据库中 user 表中的信息,当有连接进来时,先从缓存信息中进行验证,如果没有此用户,会从后端数据库中更新信息,再次进行验证

协议插件

包括客户端连接协议,和连接数据库的协议

路由插件

决定如何把客户端的请求转发给后端数据库服务器,读写分离和负载均衡的功能就是由这个模块实现的

监控插件

对各个数据库服务器进行监控,例如发现某个数据库服务器响应很慢,那么就不向其转发请求了

日志和过滤插件

提供简单的数据库防火墙功能,可以对SQL进行过滤和容错

二、MaxScale安装配置

1、MariaDB主从配置

主服务器

mysqld新增如下配置

vi /etc/my.cnf.d/server.cnf

[mysqld]
#集群配置 - 主服务器
server-id=40
# binlog-do-db = testdb //只记录testdb库变化,多个库用‘,’分隔
# binlog-ignore-db=mysql //忽略mysql库变化,多个库用‘,’分隔

从服务器

mysqld新增如下配置

vi /etc/my.cnf.d/server.cnf

[mysqld]
#集群配置 - 从服务器  
server-id=126
# binlog-do-db = testdb //只记录testdb库变化,多个库用‘,’分隔
binlog-ignore-db=mysql

主从服务器服务重启

systemctl restart mariadb.service

主服务器备份sql并导入从服务器

主服务器创建Replication账户

create user 'lbh18'@'%' identified by '81hbl';
GRANT REPLICATION SLAVE ON *.*  TO lbh18@从服务器ip IDENTIFIED BY '81hbl';
FLUSH PRIVILEGES;

查看主服务器最新binlog日志文件名

SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 |      811 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

设置从服务器为主服务器的从库并启动从服务器主从复制

change master to master_host='主服务器ip',master_user='lbh18',master_password='81hbl',master_port=10336,master_log_file='mysql-bin.000006',master_log_pos=811;
start slave;
show slave statusG

设置从服务器为只读模式

#登陆mysql查看只读状态
SHOW global variables like 'read%';
#编辑配置文件设置只读状态
[mysqld]
...
read_only=1
...
#重启从服务器mysql服务
systemctl restart mariadb.service

2、MaxScale配置

下载安装MaxScale

yum install gnutls libaio.x86_64 libaio-devel.x86_64 novacom-server.x86_64 libedit -y
wget https://downloads.mariadb.com/MaxScale/2.2.0/centos/7server/x86_64/maxscale-2.2.0-1.centos.7.x86_64.rpm
rpm -ivh maxscale-2.2.0-1.centos.7.x86_64.rpm

MariaDB主服务器创建监控与路由用户

#监控用户
create user scalemon@'%' identified by "密码";
grant replication slave, replication client on *.* to scalemon@'%';
#路由用户
create user maxscale@'%' identified by "密码";

MaxScale服务器修改配置

vi /etc/maxscale.cnf
[maxscale]
threads=auto
log_info=1
logdir=/tmp/
[server1]
type=server
address=主MariaDB服务器
port=10336
protocol=MySQLBackend
[server2]
type=server
address=从MariaDB服务器
port=10336
protocol=MySQLBackend
[MySQL Monitor]
type=monitor
module=mysqlmon
servers=server1,server2
user=scalemon
passwd=监控用户密码
monitor_interval=10000
# 确保所有slave挂掉后maxscale可正常识别master
detect_stale_master=true
[Read-Write Service]
type=service
router=readwritesplit
servers=server1,server2
user=maxscale
passwd=路由用户密码
max_slave_connections=100%
#保证会话的一致性
use_sql_variables_in=master
#允许root登录
enable_root_user=1 
#允许从超出主的同步时间,超出则不路由
max_slave_replication_lag=3600
[Read-Only Service]
type=service
router=readconnroute
servers=server1,server2
user=maxscale
passwd=监控用户密码
router_options=slave
#允许root用户登录执行
enable_root_user=1 
#主从权重
weightby=serv_weight

启动服务并查看监听端口

maxscale --config=/etc/maxscale.cnf
netstat -ntelp

MaxScale管理器

#执行以下命令
maxadmin
list servers
#状态如下
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server             | Address         | Port  | Connections | Status              
-------------------+-----------------+-------+-------------+--------------------
server1            | 主服务器ip  | 10336 |           0 | Master, Running
server2            | 从服务器ip  | 10336 |           0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------

至此,完成MaxScale中间件实现MySQL读写分离。

Centos7安装mariadb

1、安装MariaDB

安装命令

yum -y install mariadb mariadb-server

安装完成MariaDB,首先启动MariaDB

systemctl start mariadb

设置开机启动

systemctl enable mariadb

接下来进行MariaDB的相关简单配置

mysql_secure_installation

首先是设置密码,会提示先输入密码

Enter current password for root (enter for none):<–初次运行直接回车

设置密码

Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
New password: <– 设置root用户的密码
Re-enter new password: <– 再输入一次你设置的密码

其他配置

Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车

Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车,

Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车

Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车

初始化MariaDB完成,接下来测试登录

mysql -uroot -ppassword

完成。

2、配置MariaDB的字符集

文件/etc/my.cnf

vi /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

文件/etc/my.cnf.d/client.cnf

vi /etc/my.cnf.d/client.cnf

在[client]中添加

default-character-set=utf8

文件/etc/my.cnf.d/mysql-clients.cnf

vi /etc/my.cnf.d/mysql-clients.cnf

在[mysql]中添加

default-character-set=utf8

全部配置完成,重启mariadb

systemctl restart mariadb

之后进入MariaDB查看字符集

mysql> show variables like "%character%";show variables like "%collation%";

显示为

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client    | utf8                      |
| character_set_connection | utf8                      |
| character_set_database  | utf8                      |
| character_set_filesystem | binary                    |
| character_set_results    | utf8                      |
| character_set_server    | utf8                      |
| character_set_system    | utf8                      |
| character_sets_dir      | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-----------------+
| Variable_name        | Value          |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database  | utf8_unicode_ci |
| collation_server    | utf8_unicode_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

字符集配置完成。

3、添加用户,设置权限

创建用户命令

mysql>create user username@localhost identified by 'password'; 

直接创建用户并授权的命令

mysql>grant all on *.* to username@localhost indentified by 'password';

授予外网登陆权限

mysql>grant all privileges on *.* to username@'%' identified by 'password';

授予权限并且可以授权

mysql>grant all privileges on *.* to username@'hostname' identified by 'password' with grant option;

简单的用户和权限配置基本就这样了。

其中只授予部分权限把 其中 all privileges或者all改为select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file其中一部分。

12 条用于 Linux 的 MySQL/MariaDB 安全最佳实践

MySQL 是世界上最流行的开源数据库系统,MariaDB(一个 MySQL 分支)是世界上增长最快的开源数据库系统。在安装 MySQL 服务器之后,在默认配置下是不安全的,确保数据库安全通常是通用数据库管理的基本任务之一。

这将有助于增强和提升整个 Linux 服务器的安全性,因为攻击者总是扫描系统任意部分的漏洞,而数据库在过去是重点目标区域。一个常见的例子是对 MySQL 数据库的 root 密码的强制破解。

在本指南中,我们将会讲解对开发者有帮助的 MySQL/MariaDB 的 Linux 最佳安全实践。

1. 安全地安装 MySQL

这是安装 MySQL 服务器后第一个建议的步骤,用于保护数据库服务器。这个脚本可以帮助您提高 MySQL 服务器的安全性:

  • 如果您在安装期间没有设置 root 帐户的密码,马上设置它

  • 通过删除可从本地主机外部访问的 root 帐户来禁用远程 root 用户登录

  • 删除匿名用户帐户和测试数据库,默认情况下,所有用户、甚至匿名用户都可以访问这些帐户和测试数据库

# mysql_secure_installation

在运行上述命令之后,设置 root 密码并通过输入 [Yes/Y] 和按下 [Enter] 键来回答一系列问题。

未分类

安全安装 MySQL 情况界面

2. 将数据库服务器绑定到 Loopback 地址

此配置将限制来自远程机器的访问,它告诉 MySQL 服务器只接受来自本地主机的连接。你可以在主配置文件中进行设置。

# vi /etc/my.cnf                       [RHEL/CentOS]    
# vi /etc/mysql/my.conf                    [Debian/Ubuntu] 
OR
# vi /etc/mysql/mysql.conf.d/mysqld.cnf    [Debian/Ubuntu]

在 [mysqld] 部分中添加下面这一行

bind-address = 127.0.0.1

3. 禁用 MySQL 的 LOCAL INFILE

作为安全性增强的一部分,您需要禁用 local_infile,使用下面的指令以防止在 [mysqld] 部分从 MySQL 中访问底层文件系统。

local-infile=0

4. 修改 MySQL 的默认端口

设置端口变量用于监听 TCP/IP 连接的 MySQL 端口号。默认端口号是 3306,但是您可以在 [mysqld] 中修改它。

Port=5000

5. 启用 MySQL 日志

日志是了解服务运行过程中发生了什么的最好的方法之一,在受到任何攻击的时候都可以很容易的从日志里看到任何入侵相关的行为。可以通过将下边的变量添加到配置文件[mysqld]部分来开启mysql日志功能。

log=/var/log/mysql.log

6. 设置合适的 MySQL 文件的访问权限

确保你已经为所有的 mysql 服务文件和数据路径设置了合适的访问权限。文件 /etc/my.conf 只能由 root 用户修改,这样就可以阻止其他用户修改数据库服务的配置。

# chmod 644 /etc/my.cnf

7. 删除 MySQL shell 历史

你在 MySQL shell 中执行的所有的命令都会被 mysql 客户端保存到一个历史文件:~/.mysql_history。这样是很危险的,因为对于你创建过的任何用户账户,所有的在 shell 输入过的用户名和密码都会记录到历史文件里面。

# cat /dev/null > ~/.mysql_history

8. 不要在命令行中运行 MySQL 命令

正如你所知道的,你在终端上输入的所有命令都会被存储在一个历史文件中,具体取决于你正在使用的shell(例如 bash 的 shell 历史文件放在 ~/.bash_history)。攻击者访问这个历史文件可以很容易地看到记录在那里的任何密码。

非常不建议在命令行里面输入密码,如下:

# mysql -u root -ppassword_

未分类

使用密码连接 MySQL

当你查看命令行历史文件的最后的部分时,可以看到之前输入过的密码。

# history

未分类

查看命令行输入历史

推荐连接 MySQL 的方式是

# mysql -u root -p
Enter password:

9. 定义特定应用的数据库用户

对于每一个在服务器上运行的应用,只设置一个与该应用相关的数据库用户。例如你有一个 wordpress 网站,如下创建一个 wordpress 的数据库用户:

# mysql -u root -p
MariaDB [(none)]> CREATE DATABASE osclass_db;
MariaDB [(none)]> CREATE USER 'osclassdmin'@'localhost' IDENTIFIED BY 'osclass@dmin%!2';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON osclass_db.* TO 'osclassdmin'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit

并且要记住对于不再使用的数据库用户要删掉。

10. 使用额外的安全插件和库

MySQL 包含许多安全插件:验证客户端连接到 MySQL 服务器的请求、密码校验和敏感信息的安全存储等,这些都在免费版本中提供。

在这里可查看更多:https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. 定期修改 MySQL 密码

定期修改密码是一个常见的信息/应用/系统安全建议。多久修改一次密码由你内部的安全策略决定。定期修改密码可以阻止长期跟踪你的“窥探者”,获取你的密码,登录你的 MySQL 服务器。

MariaDB [(none)]> USE mysql;MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourPasswordHere') WHERE User='root' AND Host = 'localhost';MariaDB [(none)]> FLUSH PRIVILEGES;

12. 定期更新 MySQL Server 包

强烈建议定期从官方仓库更新 mysql/mariadb 包来获取最新的安全更新和错误改进。通常情况下操作系统中默认的包是过时的。

# yum update
# apt update

在对 mysql/mariadb server 进行任何修改之后,要重启服务。

# systemctl restart mariadb     #RHEL/CentOS
# systemctl restart mysql       #Debian/Ubuntu

MariaDB Galera Cluster集群优缺点

一、MariaDB Galera Cluster概要

1.简述:

MariaDB Galera Cluster 是一套在mysql innodb存储引擎上面实现multi-master及数据实时同步的系统架构,业务层面无需做读写分离工作,数据库读写压力都能按照既定的规则分发到 各个节点上去。在数据方面完全兼容 MariaDB 和 MySQL。

2.特性:

(1).同步复制 Synchronous replication
(2).Active-active multi-master 拓扑逻辑
(3).可对集群中任一节点进行数据读写
(4).自动成员控制,故障节点自动从集群中移除
(5).自动节点加入
(6).真正并行的复制,基于行级
(7).直接客户端连接,原生的 MySQL 接口
(8).每个节点都包含完整的数据副本
(9).多台数据库中数据同步由 wsrep 接口实现

3.局限性:

(1).目前的复制仅仅支持InnoDB存储引擎,任何写入其他引擎的表,包括mysql.*表将不会复制,但是DDL语句会被复制的,因此创建用户将会被复制,但是insert into mysql.user…将不会被复制的.
(2).DELETE操作不支持没有主键的表,没有主键的表在不同的节点顺序将不同,如果执行SELECT…LIMIT… 将出现不同的结果集.
(3).在多主环境下LOCK/UNLOCK TABLES不支持,以及锁函数GET_LOCK(), RELEASE_LOCK()…
(4).查询日志不能保存在表中。如果开启查询日志,只能保存到文件中。
(5).允许最大的事务大小由wsrep_max_ws_rows和wsrep_max_ws_size定义。任何大型操作将被拒绝。如大型的LOAD DATA操作。
(6).由于集群是乐观的并发控制,事务commit可能在该阶段中止。如果有两个事务向在集群中不同的节点向同一行写入并提交,失败的节点将中止。对 于集群级别的中止,集群返回死锁错误代码(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).
(7).XA事务不支持,由于在提交上可能回滚。
(8).整个集群的写入吞吐量是由最弱的节点限制,如果有一个节点变得缓慢,那么整个集群将是缓慢的。为了稳定的高性能要求,所有的节点应使用统一的硬件。
(9).集群节点建议最少3个。
(10).如果DDL语句有问题将破坏集群。