Linux之MariaDB基础详解
MySQL Memory Calculator内存占用计算器
Linux之MariaDB基础详解
MariaDB中文手册
远程登录 MySQL / MariaDB数据库配置教程
Mysql创建及删除用户命令
MariaDB/MySQL之用户管理及忘记数据管理员密码解决办法
MySQL——修改root密码的4种方法
[](https://tinpont.com/2017/fix-yum-download-mariadb-slow/)
MySQL高级实战博客
macos mysqld
We've installed your MySQL database without a root password. To secure it run:
mysql_secure_installation
MySQL is configured to only allow connections from localhost by default
To connect run:
mysql -uroot
To have launchd start mysql now and restart at login:
brew services start mysql
Or, if you don't want/need a background service you can just run:
mysql.server start
MaxScale:实现MySQL读写分离与负载均衡的中间件利器
varchar 和text 区别
varchar 和 text 都是不定长 varchar 最大65532 TEXT最大 4294967295
CREATE TABLE test (
s varchar(65532),
name TEXT(4294967295)
)
bigint unsigned 最大值: 18446744 073 709 551 613
DROP TABLE tmaxbigint;
CREATE TABLE tmaxbigint (id bigint UNSIGNED AUTO_INCREMENT PRIMARY KEY,value int);
insert into tmaxbigint values (18446744073709551613,1);
insert into tmaxbigint (value) values (1);
ERROR 1467 (HY000): Failed to read auto-increment value from storage engine
检查 MySQL 配置文件 my.cnf 是否有误的方法?
mysqld --help --verbose
Install
mariadb镜像配置
https://downloads.mariadb.org/mariadb/repositories
Ubuntu 镜像解决方案
方式 1.
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mirrors.tuna.tsinghua.edu.cn/mariadb/repo/10.2/ubuntu xenial main'
方式 2. vi /etc/apt/sources.list.d/MariaDB.list
# MariaDB 10.2 repository list - created 2018-05-07 01:22 UTC
# http://downloads.mariadb.org/mariadb/repositories/
deb [arch=amd64,i386] http://mirrors.tuna.tsinghua.edu.cn/mariadb/repo/10.2/ubuntu xenial main
deb-src http://mirrors.tuna.tsinghua.edu.cn/mariadb/repo/10.2/ubuntu xenial main
安装
sudo apt-get install mariadb-client
sudo apt-get install mariadb-galera-server galera
CentOS7 镜像解决方案
ansible all -m copy -a "src=../../../etc/yum.repos.d/MariaDB.repo dest=/etc/yum.repos.d/MariaDB.repo mode=0644"
- 创建并编辑MariaDB的源配置
sudo vi /etc/yum.repos.d/MariaDB.repo
# MariaDB 10.2 CentOS repository list - created 2017-08-15 08:02 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name=MariaDB
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/10.2/centos7-amd64
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
执行安装命令:
yum clean all && rm -rf /var/cache/yum # 防止报错
yum makecache
sudo yum install mariadb-server
如果在用阿里云的服务器,可以将上述配置中的域名替换成
http://mirrors.aliyun.com/
以上yum配置经修改后同样的适用于其他源,详细内容请往下看
yum -y install MariaDB-server MariaDB-client
Can't find messagefile '/usr/share/mysql/errmsg.sys
【可能出错1】
Can't find messagefile '/usr/share/errmsg.sys'
【解决办法1】
sudo mysqld_safe --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql &
(添加language=...报错不理会:An old style --language value with language specific part detected:/usr/local/mysql/share/english)
【可能出错2】
Can’t start server : Bind on unix socket: Permission denied解决方法:
【解决办法2】改变你mysql编译安装目录的权限: chown -R mysql:mysql /usr/local/mysql
【7】设置root密码。默认安装密码为空,为了安全你需要修改密码。
#/usr/local/mysql/bin/mysqladmin -u root password '123456'
不重启修改mysql只读变量
Variable 'log_slave_updates' is a read only variablesystem gdb -p $(pidof mysqld) -ex "set opt_log_slave_updates=1" -batch
mysql 加速数据导入
- 修改配置文件my.cnf启用缓存
innodb_flush_log_at_trx_commit=0
然后重启数据库 应该比你原来速度快100倍
0 写mysql缓存,mysql进程坏掉也会丢数据
1 直接写入磁盘 os和mysql都坏掉也不会丢数据
2 写入系统缓存,1s后刷入磁盘.mysql进程坏掉不会丢数据,os坏掉才会丢数据 - 导入数据之前执行
set unique_checks=0
来禁止对唯一索引的检查,数据导入完成之后再运行set unique_checks=1
. - 导入数据之前执行
set foreign_key_checks=0
来禁止对外键的检查,数据导入完成之后再执行set foreign_key_checks=1
. - 导入数据之前执行
set autocommit=0
禁止自动事务的自动提交,数据导入完成之后,执行set autocommit=1
设置缓存大小
[mysqld]
tmp_table_size=2G
max_heap_table_size=2G
SET GLOBAL tmp_table_size = 1024 * 1024 * 1024 * 2;
SET GLOBAL max_heap_table_size = 1024 * 1024 * 1024 * 2;
SELECT @@max_heap_table_size;
docker运行mariadb
sudo chown -R 999:999 /var/run/mysqld
docker run -d --restart=always --name mariadb -p 3306:3306 -e MYSQL_ROOT_PASSWORD= -v /docker/mysql:/var/lib/mysql rinetd/mariadb
美团SQLAdvior优化
docker run --rm imred/sqladvisor -h xx -P xx -u xx -p 'xx' -d xx -q "sql" -v 1
重新初始化mysql
mysql_install_db && chown -R mysql:mysql /var/lib/mysql
自动补全
linux中mysql的配置文件在 /etc/mysql
修改my.cnf
在#no-auto-rehash
# faster start of mysql but no tab completition 一行之下添加一行:
auto-rehash
统计
SELECT ktitle,COUNT(*) FROM
ultrax.
pre_fx_vote_logWHERE
kid= '89'
Mysql查询数据表中某字段重复出现的次数,并按照次数排序
select [name],count(*) from [table] group by [name] order by count(*) DESC limit 10
SELECT ktitle,COUNT(*) FROM
ultrax.
pre_fx_vote_loggroup by ktitle order by count(*) DESC limit 15
开启 mysql 查询日志
| general_log | ON |
| general_log_file | /var/log/mysql/mysql.log
mysql>set global general_log_file='/tmp/general.log';
mysql>set global general_log=on;
mysql>set global general_log=off;
# && sed -i -e "s/^#general_log_file/general_log_file/" /etc/mysql/my.cnf\
# && sed -i -e "s/^#general_log/general_log/" /etc/mysql/my.cnf\
# && sed -i -e "s/^#log_slow_queries/log_slow_queries/" /etc/mysql/my.cnf\
# && sed -i -e "s/^#long_query_time.*/long_query_time = 1/" /etc/mysql/my.cnf
mysql 配置超时时间
show global variables like '%timeout%';
设置超时时间,临时生效(以秒为单位):
msyql> set global wait_timeout=86400;
msyql> set global interactive_timeout=86400;
修改配置文件/etc/my.cnf.d/server.conf
在 [mysqld]下添加
wait_timeout=86400
sed -i 's/^interactive-timeout.*/interactive-timeout = 86400/' /etc/my.cnf
sed -i 's/^wait-timeout.*/wait-timeout = 86400/' /etc/my.cnf
密码错误 ERROR 1045 (28000) : Access denied for user 'root'@'172.17.0.4' (using password: YES)
解决方法:密码输入错误,仔细检查密码
权限问题 Do you already have another mysqld server running on socket: /var/run/mysqld/mysqld.sock ?
`id mysql`
`uid=27(mysql) gid=27(mysql) groups=27(mysql)`
`uid=33(www-data) gid=33(www-data) groups=33(www-data)`
sudo userdel mysql
sudo groupadd -r -g 999 mysql && sudo useradd -r -u 999 -c mysql -g mysql -d /var/lib/mysql -s /usr/sbin/nologin mysql
sudo gpasswd -a ${USER} mysql
sudo chown -R mysql:mysql /var/lib/mysql /var/run/mysqld
docker run -d --name mysql -v $PWD/database/mysql:/var/lib/mysql -v /var/run/mysqld:/var/run/mysqld -e MYSQL_ROOT_PASSWORD=root mysql
docker exec -it mysql bash
usermod -u 999 mysql
groupmod -g 999 mysql
find / -user 1005 -exec chown -h foo {} \;
find / -group 2000 -exec chgrp -h foo {} \;
如何设置不区分表名大小写。
一般情况下 Linux 服务器默认安装 MySQL 的数据库表名是区分大小写的,如果 ECS 上安装的 MySQL 不支持表名区分大小下,则按照如下方法操作即可:
用 root 登录,修改 /etc/my.cnf (注意:以实际 my.cnf 配置文件路径为准)
在 [mysqld] 节点下,加入一行: lower_case_table_names=1
重启 MySQL 即可;
执行命令
docker exec -i mariadb mysql -uroot -pXXXX -e "show databases;"
docker exec -i mariadb mysql -uroot -pXXXX -e "show databases; select user,host from mysql.user;"
`
备份全部数据库
docker exec -it mariadb mysqldump -uroot -proot --all-databases >bak.sql
备份指定数据库
docker exec -it mariadb mysqldump -uroot -proot chengzhi >bak.sql
#恢复指定数据库docker exec -i wuye_mysql mysql -uroot -ptoor sanyang <sanyang2016-4-28.sql
修复gtid
Unable to load replication GTID slave state from mysql.gtid_slave_pos: Table 'mysql.gtid_slave_pos' doesn't exist" and Last_Errno 1146
mysql_upgrade
show create table mysql.gtid_slave_pos\G
mariadb 无法启动 [用户 + 权限]
sudo chown -R 999:999 mysql
rm -f /var/lib/mysql/aria_log*
rm -f /var/lib/mysql/ib_logfile*
mysql 执行shell命令
mysql> system ifconfig -a
修复mariadb 数据库
mysql_upgrade -u root -p
初始化数据
mysql_install_db --defaults-file=/etc/mysql/my.cnf --datadir=/var/lib/mysql --user=mysql
登录数据库
mysql -h127.0.0.1 -P3306 -uroot -proot -e 'show databases;'
mysql -S /var/run/mysqld/mysqld.sock -uroot -p
mariadb 允许远程访问方式
mysql -h 139.129.108.163 -u kyxx -p
创建数据库
CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database yourdb DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
数据库备份恢复
show databases;
mysqldump -uroot -p database >bak.sql
mysqldump -uroot -p -A >bak.sql
show variables like 'open%';
mysql> source /var/lib/mysql/ghost.sql
关于导入导出docker中的mysql数据库
2.执行导出(备份)数据库命令
由第一步的结果可知,我们的mysql运行在一个叫mysql-online的docker容器中。而我们要备份的数据库就在里面,叫做test_db。mysql的用户名密码均为root,我们将文件备份到/opt/sql_bak文件夹下。
docker exec -it mysql-online mysqldump -uroot -proot test_db > /opt/sql_bak/test_db.sql
3.执行导入(恢复)数据库命令:
目的:由第二步导出的sql文件,复制一个数据库。
首先我们进去,创建一个空白的数据库:
docker exec -it mysql-online mysql -uroot -proot
create database test_db_copy;
然后我们将sql文件导入:
docker exec -i mysql-online mysql -uroot -proot test_db_copy < /opt/sql_bak/test_db.sql
注意:这里需要将参数 -it 更换为 -i ,否则会报错:"cannot enable tty mode on non tty input"
查询用户
0. ` show databases; `
1. ` show tables from mysql; `
2. ` show columns from mysql.user; `
3. ` select user,host,authentication_string from mysql.user; `
show grants;
- show tables或show tables from database_name; -- 显示当前数据库中所有表的名称。
- show databases; -- 显示mysql中所有数据库的名称。
- show columns from table_name from database_name; 或show columns from database_name.table_name; -- 显示表中列名称。
- show grants for user_name; -- 显示一个用户的权限,显示结果类似于grant 命令。
- show index from table_name; -- 显示表的索引。
- show status; -- 显示一些系统特定资源的信息,例如,正在运行的线程数量。
- show variables; -- 显示系统变量的名称和值。
- show processlist; -- 显示系统中正在运行的所有进程,也就是当前正在执行的查询。大多数用户可以查看他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。
- show table status; -- 显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间。
- show privileges; -- 显示服务器所支持的不同权限。
- show create database database_name; -- 显示create database 语句是否能够创建指定的数据库。
- show create table table_name; -- 显示create database 语句是否能够创建指定的数据库。
- show engines; -- 显示安装以后可用的存储引擎和默认引擎。
- show innodb status; -- 显示innoDB存储引擎的状态。
- show logs; -- 显示BDB存储引擎的日志。
- show warnings; -- 显示最后一个执行的语句所产生的错误、警告和通知。
- show errors; -- 只显示最后一个执行语句所产生的错误。
- show [storage] engines; --显示安装后的可用存储引擎和默认引擎。
################################################################################
##MySQL——修改root密码的N种方法
MySQL忘记管理员密码的解决办法
/etc/init.d/mysql stop
mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
mysqld --skip-grant-tables &
mysql -u root mysql
mysql>use mysql
mysql>update user set password=password("toor") where user="root";
mysql>flush privileges;用SET PASSWORD命令
首先登录MySQL。
格式:mysql> set password for 用户名@localhost = password('新密码');
例子:mysql> set password for root@localhost = password('123');用mysqladmin
格式:mysqladmin -u用户名 -p旧密码 password 新密码
例子:mysqladmin -uroot -p123456 password 123
修改root密码mysqladmin -u root password 'root'
用UPDATE直接编辑user表
首先登录MySQL。
mysql> use mysql;
mysql> update user set password=password('123') where user='root' and host='localhost';
mysql> flush privileges;
/etc/init.d/mysql restart
mysql -uroot -p
###############################################################################
创建用户
CREATE USER foo;
INSERT INTO user(User, Host, Password) VALUES('foo', '%', Password('hello'));
SELECT User, Host, Password FROM user WHERE User = 'foo';
删除用户
DROP USER A;
drop user 'kyxx'@'123.132.226.%';
DELETE FROM user WHERE User = 'FOO';
创建备份用户
CREATE USER 'backupuser'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT,SHOW VIEW,LOCK TABLES,RELOAD,REPLICATION CLIENT ON . TO 'backupuser'@'localhost';
FLUSH PRIVILEGES;
用户设置密码
SET PASSWORD FOR A = Password('hello');
重命名用户
RENAME USER a TO A;
UPDATE user SET User = 'FOO' WHERE User = 'foo';
SELECT User, Host, Password FROM user WHERE User = 'FOO';
查看用户权限
SHOW GRANTS FOR A;
修改用户权限
GRANT SELECT ON crashcourse.* TO A;
grant all on . to homestead;
解除用户权限
REVOKE SELECT ON crashcourse.* FROM A;
一、用户授权
1、我们可以直接创建用户账:
//使用password关键字的话,可以加密密码mysql>create user username@'hostname' [identified by [password]'your_passwd']
命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password';
说明:
username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%.
password - 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器.
例子:
CREATE USER 'root'@'localhost' IDENTIFIED BY '123456';
CREATE USER 'username'@'192.168.1.10_' IDENDIFIED BY '123456';
CREATE USER 'username'@'%' IDENTIFIED BY '123456';
CREATE USER 'username'@'%' IDENTIFIED BY '';
CREATE USER 'username'@'%';
2、也可以在授权的时候创建用户帐户:
//把所有用户的权限授予username@'hostname',密码是your_passwdmysql>grant all on *.* to username@'hostname' indentified by [password]'your_passwd'
命令:GRANT privileges ON databasename.tablename TO 'username'@'host'
privileges - 用户的操作权限,如 SELECT INSERT UPDATE DELETE 等.如果要授予所的权限则使用ALL.;
databasename - 数据库名,
tablename-表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示, 如.*
例子:
GRANT SELECT, INSERT ON test.user TO 'username'@'%';
GRANT ALL ON . TO 'username'@'%';
注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
3、如果需要更改用户名和密码的话:
//更改用户名mysql>rename user old_name@'old_host' to new_name@'new_host'
//修改密码mysql>set password for user_name@'host'=password('new_passwd')
命令:
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
如果是当前登陆用户用SET PASSWORD = PASSWORD("newpassword");
例子: SET PASSWORD FOR 'username'@'%' = PASSWORD("123456");
4.撤销用户权限
命令: REVOKE privilege ON databasename.tablename FROM 'username'@'host';
说明: privilege, databasename, tablename - 同授权部分.
例子: REVOKE SELECT ON . FROM 'username'@'%';
注意: 假如你在给用户'username'@'%'授权的时候是这样的(或类似的):GRANT SELECT ON test.user TO 'username'@'%', 则在使用REVOKE SELECT ON . FROM 'username'@'%';命令并不能撤销该用户对test数据库中user表的SELECT 操作.相反,如果授权使用的是GRANT SELECT ON . TO 'username'@'%';则REVOKE SELECT ON test.user FROM 'username'@'%';命令也不能撤销该用户对test数据库中user表的Select 权限.
具体信息可以用命令SHOW GRANTS FOR 'username'@'%'; 查看.
五.删除用户
命令: DROP USER 'username'@'host';
##SQL测试
1.新建用户。
//登录MYSQL
@>mysql -u root -p
@>密码
//创建用户
mysql> mysql> insert into mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_sub
ject) values("localhost","phplamp",password("1234"),'','','');
这样就创建了一个名为:phplamp 密码为:1234 的用户。
然后登录一下。
mysql>exit;
@>mysql -u phplamp -p
@>输入密码
mysql>登录成功
2.为用户授权。
//登录MYSQL(有ROOT权限)。我里我以ROOT身份登录.
@>mysql -u root -p
@>密码
//首先为用户创建一个数据库(phplampDB)
mysql>create database phplampDB;
//授权phplamp用户拥有phplamp数据库的所有权限。
>grant all privileges on phplampDB.* to phplamp@localhost identified by '1234';
//刷新系统权限表
mysql>flush privileges;
mysql>其它操作
/*
如果想指定部分权限给一用户,可以这样来写:
mysql>grant select,update on phplampDB.* to phplamp@localhost identified by '1234';
//刷新系统权限表。
mysql>flush privileges;
*/
3.删除用户。
@>mysql -u root -p
@>密码
mysql>Delete FROM user Where User="phplamp" and Host="localhost";
mysql>flush privileges;
//删除用户的数据库
mysql>drop database phplampDB;
4.修改指定用户密码。
@>mysql -u root -p
@>密码
mysql>update mysql.user set password=password('新密码') where User="phplamp" and Host="localhost";
mysql>flush privileges;
5.列出所有数据库
mysql>show database;
6.切换数据库
mysql>use '数据库名';
7.列出所有表
mysql>show tables;
8.显示数据表结构
mysql>describe 表名;
9.删除数据库和数据表
mysql>drop database 数据库名;
-- 查看MySQL的状态
status;
-- 显示支持的引擎
show engines;
-- 显示所有数据库
show databases;
-- 切换数据库上下文,即设置当前会话的默认数据库
use mysql;
-- 显示本数据库所有的表
show tables;
-- 显示表中列名称
show columns from table_name from database_name;
show columns from database_name.table_name;
-- 显示一个用户的权限,显示结果类似于grant 命令
show grants for user_name;
-- 显示表的索引
show index from table_name;
-- 显示变量
show variables;
-- 显示插件
show plugins;
-- 查第一条
select * from table_name limit 1;
-- 查询最后一条
select day from table_name order by id desc limit 1;
-- 查询前30条记录
select * from table_name limit 0,30
-- 简单查询
select id,userId from t_test where userId='admin' ;
-- 创建一个表
CREATE TABLE t_test (
id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
userId char(36),
lastLoginTime timestamp,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 插入测试数据
insert into t_test(userId)
values
('admin')
,('haha')
;
##修改数据存放目录
停止数据库
service mysql stop
创建目录,假设没有的话
mkdir /usr/local/ieternal/mysql_data
拷贝默认数据库到新的位置
-a 命令是将文件属性一起拷贝,否则各种问题
cp -a /var/lib/mysql /usr/local/ieternal/mysql_data
备份原来的数据
cp -a /etc/my.cnf /etc/my.cnf_original
其实查看 /etc/my.cnf 文件可以发现
MariaDB 的此文件之中只有一个包含语句
所以需要修改的配置文件为 /etc/my.cnf.d/server.cnf
cp /etc/my.cnf.d/server.cnf /etc/my.cnf.d/server.cnf_original
vim /etc/my.cnf.d/server.cnf
在文件的 mysqld 节下添加内容
[mysqld]
datadir=/usr/local/ieternal/mysql_data/mysql
socket=/var/lib/mysql/mysql.sock
#default-character-set=utf8
character_set_server=utf8
slow_query_log=on
slow_query_log_file=/usr/local/ieternal/mysql_data/slow_query_log.log
long_query_time=2
其中,也只有 datadir 和 socket 比较重要; 而 default-character-set 是 mysql 自己认识的,而 mariadb5.5 就不认识,相当于变成了 character_set_server
服务器操作系统:CentOS 7
Web 服务器 IP 地址:192.168.33.61
数据库服务器 IP 地址:192.168.33.63
允许外网访问
第一步:编辑 my.cnf
vi /etc/my.cnf
vi /etc/my.cnf.d/server.cnf
在 [mysqld] 这个区域的下面,找到 bind-address ,如果没有,就去添加一行:
[mysqld]
bind-address=192.168.33.63
service mariadb restart
systemctl restart mariadb
sudo /etc/init.d/mysql start
第二步:添加远程用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
现在数据库服务可以接受远程的连接,不过目前还没有用户拥有远程连接的权限,你需要再手工去添加一个远程用户,先用 root 用户登录到数据库服务:
mysql -u root -p
然后去创建一个数据库:
create database drupal;
再创建一个新的用户,注意这个用户是在 Web 服务器上可以使用的用户,所以需要指定一个 Web 服务器的 IP 地址:create user 'drupal'@'192.168.33.61' identified by 'drupal'
;
也就是,drupal 这个用户,只能在 192.168.33.61 这个 IP 地址的服务器上连接到数据库服务器。再去给这个用户分配权限:grant all privileges on drupal.* to ' drupal'@'192.168.33.61';
立即生效,再执行:flush privileges;
##第三步:远程连接
在 Web 服务器上,试着去登录一下数据库服务器上的数据库系统:
mysql -u drupal -h 192.168.33.63 -p
这里我们用 -h 选择,指定了一下要登录到的服务器的 IP 地址。这个 IP 地址就是数据库服务器的 IP 地址。
如果你发看到类似下面这样的错误:
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.33.63' (113 "No route to host")
很有可能是在数据库服务器上的防火墙的配置原因,配置一下 CentOS 7 自带的防火墙 Firewalld :
firewall-cmd --zone=public --add-port=3306/tcp
完成以后,重新再到 Web 服务器上尝试连接数据库服务器。
补充:## mariaDB 创建用户
我假定你已经做完初始化数据库的操作了(禁掉root的远程访问),然后在本地用root帐号连接数据库了。
mysql -u root -p mysql
a. 准备数据目录
以/mydata/data为例;
b. 配置mariadb
# groupadd -r -g 306 mysql
# useradd -r -g 306 -u 306 mysql
# tar xf mariadb-VERSION.tar.xz -C /usr/local
# ln -sv mariadb-version mysql
# cd /usr/local/mysql
# chown -R root:mysql ./*
# scripts/mysql_install_db --datadir=/mydata/data --user=mysql
# cp supper-files/mysql.server /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
c. 准备配置文件
配置格式:类ini格式,为各程序均通过单个配置文件提供配置信息;
[prog_name]
能用二进制格式安装,配置文件查找次序:
/etc/my.cnf --> /etc/mysql/my.cnf --> --default-extra-file=/PATH/TO/CONF_FILE --> ~/.my.cnf
OS提供的mariadb rpm包安装的配置文件查找次序:
/etc/mysql/my.cnf --> /etc/my.cnf --> --default-extra=/PATH/TO/conf_file --> ~/my.cnf
以上两者越靠后就是最后生效的.
# mkdir /etc/mysql
# cp support-files/my-large.cnf /etc/mysql/my.cnf
添加三个选项:
[mysqld]
datadir = /mydata/data
innodb_file_per_table = on
skip_name_resolve = on
MariDB程序的组成
MariaDB-client 客户端工具像mysql CLI,mysqldump,和其它
MariaDB-common 符集文件和/etc/my.cnf
MariaDB-compat 客户端旧共享库,可能老版本的MariaDB或MySQL客户端需要
MariaDB-devel 开发header和静态库。
MariaDB-server 服务器和服务器工具,像myisamchk和mysqlhotcopy都在这里
MariaDB-shared 动态客户端库
MariaDB-test mysql-client-test可执行和mysql-test框架进行测试
Client
mysql : CLI交互式客户端程序
mysqldump : 备份工具
mysqladmin: 管理工具
mysqlbinlog : 查看二进制日志工具
Server
mysqld: 服务端进程
mysqld_safe : 服务端进程,默认也是运行的此进程
mysqld_multi : 服务端进程, 多实例
mysql_upgrade : 升级工具
服务端监听的两种socket地址
ip socket
监听在3306/tcp,支持远程通信
unix socket
监听在sock文件上(/tmp/mysql.sock, /var/lib/mysql/mysql.sock),仅支持本地通信,通信主机为localhost,127.0.0.1都基于unix socket文件通信
命令行交互式客户端程序---mysql工具
mysql -h127.0.0.1 -uroot -proot1234569 -e 'show databases;'
-uUSERNAME : 用户名,默认为root
-pPASSWD : 用户的密码
-hHOST : 服务器主机,默认为localhost
DB_NAME: 连接到服务端之后,指明默认数据库
-e 'SCRIPT' : 连接至MYSQL运行某命令后,直接退出,并返回结果
注意: mysql的用户帐号由两部分组成,'username'@'hostname',其中host用于限制此用户可通过哪些主机连接当前的MSYQL服务器
支持通配符:
% : 匹配任意长度的任意字符
172.16.%.%
_ : 匹配任意单个字符
内置命令
\u DB_NAME : 设定哪个库为默认数据库
\q : 退出
\d CHAR : 设定新的语句结束符
\g : 语句通用结束标记
\G : 语句结束标记,但以竖排方式显示
\s : 返回客户端与服务端的连接状态
\c : 取消命令运行
通过mysql协议发往服务器执行并取回结果,每个命令都必须有结束符,默认为";",示例如下:
for i in {1..100};
do AGE=$[$RANDOM%100];
mysql -uroot -pM8T9cw -e "insert mydb.student(id,name,age) value ($i,\"stu$i\",$AGE);";
done