安装
Mysql
大部分系统常用源中包含mysql,直接使用自带的包管理工具安装 即可,对于源中无法找到mysql的系统可以访问官网获取 安装方法1sudo zypper install mysql-server mysql-client
CentOS7
CentOS7的常用源中即不含mysql,安装mysql则需要添加mysql源, 同样在官网中找到添加方式:下载的是RPM源rpm包
$ sudo yum localintall安装后即添加源
使用yum直接安装mysql,需要注意的是默认情况下只有最新版本 mysql源是enabled,其他版本的需要--enablerepo指定或者 /etc/yum.repo.d下修改文件
Mariadb
mariadb和mysql大部分兼容,添加了一些新的特性,是mysql的一个 开源分支,由mysql的作者维护,避免mysql在被Oracle收购后闭源。大部分情况下,mariadb可以完全看作是mysql
甚至在某些系统中,mariadb服务有别名mysql
mariadb控制台命令也是mysql
配置
配置文件/etc/mysql/my.cnf:mysql主配置文件mysql的此配置文件内包含有具体的配置
mariadb此文件中则不包含具体配置,而是导入配置文件1
2!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.cond.d/
~/.my.cnf一般不存在,需要自行建文件,注意需要设置文件权限, 只能root用户可写,否则mysql会忽略此配置文件
mysqld服务启动需要root权限,因此~目录下的配置文件 基本不可能影响mysql-server状态,即[server]下的配置 基本是无效的
数据位置数据库存放数据位置:/var/lib/mysql/db_name/
Mysql-Client
登陆
@todo 一个问题,我安装的mariadb,默认的root用户无法在一般用户账户 登陆,必须sudo才能正常登陆
参数登陆1mysql -h host -P port -u user -p
mysql不带参数启动则是默认-p 参数不能省略
文件1mysql --defaults-file=file_name
文件内容格式类似于配置文件1
2
3
4
5[client]
host=
user=
password=
database=(可选)
注意mysql中默认存在一个用户名为空的账户,只要在本地,可以 不用账户、密码登陆mysql,因为这个账号存在,使用新建用户 无法通过密码登陆,需要在1
2
3$ use mysql;
$ delete from user where User="";
$ flush privileges;
Mysql交互命令
Show信息类SHOW DATABASES:列出MySQLServer数据库。
SHOW TABLES [FROM db_name]:列出数据库数据表。
SHOW TABLE STATUS [FROM db_name]:列出数据表及表状态信息。
SHOW COLUMNS FROM tbl_name [FROM db_name]:列出资料表字段DESC tbl_name:同
SHOW FIELDS FROM tbl_name [FROM db_name]
DESCRIBE tbl_name [col_name]
SHOW FULL COLUMNS FROM tbl_name [FROM db_name]:列出字段及详情
SHOW FULL FIELDS FROM tbl_name [FROM db_name]:列出字段完整属性
SHOW INDEX FROM tbl_name [FROM db_name]:列出表索引
SHOW STATUS:列出 DB Server 状态
SHOW VARIABLES [like pattern]:列出 MySQL 系统环境变量
SHOW PROCESSLIST:列出执行命令。
SHOW GRANTS FOR user:列出某用户权限
UserCREATE USER 'USER_NAME'@'ADDRESS' IDENTIFIED BY 'PASSWORD'IDENTIFIED BY PASSWORD这个语法好像已经被丢弃了
SET PASSWORD FOR 'USER_NAME'@'ADDRESS' = PASSWORD('NEW_PWD')
SET PASSWORD = PASSWORD('NEW_PWD'):修改当前用户密码
GRANT PRIVILEGES ON DB_NAME.TBL_NAME TO 'USER_NAME'@'ADDRESS' [WITH GRANT OPTION]WITH GRANT OPTION:允许用户授权
REVOKE PRIVILIEGES ON DB_NAME.TBL_NAME TO 'USER_NAME'@'ADDRES%'
DROP 'USER_NAME'@'ADDRESS'
说明revoke和grant中的权限需要一致才能取消相应授权grant select不能通过revoke all取消select
grant all也不能通过revoke select取消select
特殊符号%:所有address,也可以是ip部分,如:111.111.111.%这个其实在sql语句中可以表示任意长度字符串
*:所有数据库、表
Priviledgesalteralter table
alter routinealter or drop routines
createcreate table
create routinecreate routine
create temporary tablecreate temporary table
create usercreate, drop, rename users and revoke all privilieges
create viewcreate view
deletedelete
dropdrop table
executerun stored routines
fileselect info outfile and load data infile
indexcreate index and drop index
insertinsert
lock tableslock tables on tables for which select is granted
processshow full processlist
reloaduse flush
replicati on clientask where slave or master server are
replicati on slave
selectselect
show databasesshow databases
show viewshow view
shutdownuse mysqladmin shutdown
superchange master, kill, purge master logs,set global sql statements, use mysqladmin
debug command, create an extra connection
even reach the maximum amount|
|update|update| |usage|connect without any specific priviliege|
执行Sql脚本shell内执行1mysql -h host -D db_name -u user -p < file_name.sql;
mysql命令行执行1source file_name.sql;
导入、导出数据
导入数据shell内
mysql命令行内1
2
3
4
5load data [local] infile '/path/to/file' into table tbl_name
fields terminated by 'sep_char'
optionally enclosed by 'closure_char'
escaped by 'esc_char'
lines terminated by `rn`;若/path/to/file不是绝对路径,则被认为是相对于当前 数据库存储数据目录的相对路径,而不是当前目录
关键字local表示从客户端主机导入数据,否则从服务器 导入数据
导出数据shell内
mysql命令行内
注意:远程登陆mysql时,两种方式导出数据不同,shell导出 数据可以导出至client,而mysql命令行内导出至server
Mysql-Server
数据库字符编码方式
查看只查看数据库编码方式1show variables like "character_set_database;
查看数据库相关的编码方式1show variables like "character%";
variable_namevaluecharacter_set_clientlatin1
character_set_connectionlatin1
character_set_databaselatin1
character_set_filesystembinary
character_set_resultslatin1
character_set_serverlatin1
character_set_systemutf8
character_sets_dir/usr/share/mysql/charsets/
另一种查询数据库编码方式1show variables like "collation%";
Variable_nameValuecollation_connectionutf8mb4_general_ci
collation_databaseutf8mb4_general_ci
collation_serverutf8mb4_general_ci
相关变量说明character_set_client:客户端编码方式
character_set_connection:建立连接是所用编码
character_set_database:数据库编码
character_set_results:结果集编码
character_set_server:服务器编码
保证以上编码方式相同则不会出现乱码问题,还需要注意其他连接 数据库的方式不一定同此编码方式,可能需要额外指定
修改编码方式
修改数据库默认编码方式
修改mysql配置文件(/etc/mysql/my.cnf) #todo mysql配置文件的优先级 utf8mb4意义1
2
3
4
5[client]
default-character-set=utf8mb4
[mysqld]
default-character-set=utf8mb4
init_connect="SET NAMES utf8mb4"
重启mysql即可
修改单个数据库创建时1create database db_name character set utf8 collate utf8_general_ci;
1create database if not exists db_name defualt charater set utf8;
脚本、窗口1set names gbk;
只修改character_set_client、character_set_connection、 character_set_results编码方式,且只对当前窗口、脚本有效, 不影响数据库底层编码方式