Linux之MariaDB基础详解


原文链接: Linux之MariaDB基础详解

Linux之MariaDB基础详解
MariaDB中文手册
远程登录 MySQL / MariaDB数据库配置教程
Mysql创建及删除用户命令
MariaDB/MySQL之用户管理及忘记数据管理员密码解决办法
MySQL——修改root密码的4种方法
[](https://tinpont.com/2017/fix-yum-download-mariadb-slow/)
MySQL高级实战博客

MaxScale:实现MySQL读写分离与负载均衡的中间件利器

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"

  1. 创建并编辑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 variable
system gdb -p $(pidof mysqld) -ex "set opt_log_slave_updates=1" -batch

mysql 加速数据导入

  1. 修改配置文件my.cnf启用缓存 innodb_flush_log_at_trx_commit=0 然后重启数据库 应该比你原来速度快100倍
    0 写mysql缓存,mysql进程坏掉也会丢数据
    1 直接写入磁盘 os和mysql都坏掉也不会丢数据
    2 写入系统缓存,1s后刷入磁盘.mysql进程坏掉不会丢数据,os坏掉才会丢数据
  2. 导入数据之前执行set unique_checks=0来禁止对唯一索引的检查,数据导入完成之后再运行set unique_checks=1.
  3. 导入数据之前执行set foreign_key_checks=0来禁止对外键的检查,数据导入完成之后再执行set foreign_key_checks=1.
  4. 导入数据之前执行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(*) FROMultrax.pre_fx_vote_logWHEREkid= '89'

Mysql查询数据表中某字段重复出现的次数,并按照次数排序

select [name],count(*) from [table] group by [name] order by count(*) DESC limit 10
SELECT ktitle,COUNT(*) FROMultrax.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)`
  1. sudo userdel mysql
  2. sudo groupadd -r -g 999 mysql && sudo useradd -r -u 999 -c mysql -g mysql -d /var/lib/mysql -s /usr/sbin/nologin mysql
  3. sudo gpasswd -a ${USER} mysql
  4. sudo chown -R mysql:mysql /var/lib/mysql /var/run/mysqld
  5. 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
  6. 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;

  1. show tables或show tables from database_name; -- 显示当前数据库中所有表的名称。
  2. show databases; -- 显示mysql中所有数据库的名称。
  3. show columns from table_name from database_name; 或show columns from database_name.table_name; -- 显示表中列名称。
  4. show grants for user_name; -- 显示一个用户的权限,显示结果类似于grant 命令。
  5. show index from table_name; -- 显示表的索引。
  6. show status; -- 显示一些系统特定资源的信息,例如,正在运行的线程数量。
  7. show variables; -- 显示系统变量的名称和值。
  8. show processlist; -- 显示系统中正在运行的所有进程,也就是当前正在执行的查询。大多数用户可以查看他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。
  9. show table status; -- 显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间。
  10. show privileges; -- 显示服务器所支持的不同权限。
  11. show create database database_name; -- 显示create database 语句是否能够创建指定的数据库。
  12. show create table table_name; -- 显示create database 语句是否能够创建指定的数据库。
  13. show engines; -- 显示安装以后可用的存储引擎和默认引擎。
  14. show innodb status; -- 显示innoDB存储引擎的状态。
  15. show logs; -- 显示BDB存储引擎的日志。
  16. show warnings; -- 显示最后一个执行的语句所产生的错误、警告和通知。
  17. show errors; -- 只显示最后一个执行语句所产生的错误。
  18. show [storage] engines; --显示安装后的可用存储引擎和默认引擎。

################################################################################
##MySQL——修改root密码的N种方法

  1. 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;

  2. 用SET PASSWORD命令
    首先登录MySQL。
    格式:mysql> set password for 用户名@localhost = password('新密码');
    例子:mysql> set password for root@localhost = password('123');

  3. 用mysqladmin
    格式:mysqladmin -u用户名 -p旧密码 password 新密码
    例子:mysqladmin -uroot -p123456 password 123
    修改root密码
    mysqladmin -u root password 'root'

  4. 用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_passwd
mysql>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

`