一、数据库管理系统
1、RDBMS关系型数据库特点
①二维表
②典型产品Oracle传统企业,MySQL是互联网企业产品
③数据存取通过SQL
④最大的特点,数据安全性很强(ACID)
2、NoSQL非关系型数据库特点
①不是否定关系型数据库,做关系型数据库的补充
②典型产品:Redis持久化缓存、MongoDB、Memcached
③管理不适用SQL管理,而是用一些特殊的API或者数据接口
二、MySQL安装方式
1、Yum安装方便、安装速度快,无法定制
2、二进制:不方便安装,解压即可使用,无法定制
3、编译安装:可定制,安装慢
5.5之前:./configure make && make install
5.5之后:cmake gmake
4、定制RPM包,先编译然后制作rpm再制作yum仓库,然后yum安装
安装简单、速度快,可定制,定制时间长,比较复制,大型企业都会选择定制RPM
三、实战编译安装MySQL-5.6.36
1、环境
[root@db mysql-5.6.36]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@db mysql-5.6.36]# uname -r 2.6.32-696.el6.x86_64 [root@db mysql-5.6.36]# /etc/init.d/iptables status iptables: Firewall is not running. [root@db mysql-5.6.36]# getenforce Disabled [root@db mysql-5.6.36]# hostname -I 172.19.5.54 172.16.1.54
2、安装
安装依赖包创建用户
yum install -y ncurses-devel libaio-devel cmake
useradd -s /sbin/nologin -M mysql
mkdir /server/tools/ -p cd /server/tools/ wget -q http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.36.tar.gz tar xf mysql-5.6.36.tar.gz cd mysql-5.6.36 cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.36 -DMYSQL_DATADIR=/application/mysql-5.6.36/data -DMYSQL_UNIX_ADDR=/application/mysql-5.6.36/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DWITH_ZLIB=bundled -DWITH_SSL=bundled -DENABLED_LOCAL_INFILE=1 -DWITH_EMBEDDED_SERVER=1 -DENABLE_DOWNLOADS=1 -DWITH_DEBUG=0 make && make install ln -s /application/mysql-5.6.36/ /application/mysql cp /server/tools/mysql-5.6.36/support-files/my*.cnf /etc/my.cnf /application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data --user=mysql cp /server/tools/mysql-5.6.36/support-files/mysql.server /etc/init.d/mysqld chmod 700 /etc/init.d/mysqld chkconfig mysqld on chkconfig --list mysqld mkdir /application/mysql/tmp chown -R mysql.mysql /application/mysql/ echo 'PATH=/application/mysql/bin/:$PATH' >>/etc/profile source /etc/profile /etc/init.d/mysqld start
Cmake的作用
①定制软件的安装路径 ②定制mysql的源程序和命令脚本 bin/mysqld(二进制的)关键守护程序源码 bin/mysql bin/mysqld_safe scripts/mysql.server bin/mysqldump bin/mysqladmin supports-file/mysql_install_db
5.7版本开始,需要安装Boost库
-DWITH_BOOST=/server/tools/boost_1_59_0 也可以直接cmake指定参数 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=<directory> 系统会下载 boost
3、清理数据库及不需要的用户
drop database test; drop user 'root'@'::1'; drop user 'root'@'db'; drop user ''@'db'; drop user ''@'localhost'; mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 3 rows in set (0.00 sec) mysql> select user,host from mysql.user; +------+-----------+ | user | host | +------+-----------+ | root | 127.0.0.1 | | root | localhost | +------+-----------+ 2 rows in set (0.00 sec)
4、安装遇到的报错
问题1:
ERROR! The server quit without updating PID file (/application/mysql-5.6.36/data/db.pid).
解决:
chown -R mysql.mysql /application/mysql-5.6.36/
问题2:
数据库启动会提示,找不到/application/tmp/mysql.sock,原因是5.6.36版本不会自动创建tmp目录
解决:
mkdir /application/mysql/tmp
其它常见问题
①权限.chown -R mysql.mysql ②killall mysqld ③重新初始化数据. ④运行1年了,出问题(非法(断电)关机或者非法关数据库,例如kill -9)
四、MySQL基础命令使用
命令 |
说明 |
show databases; |
查询显示所有的数据库信息 |
create database oldboy; |
创建新的数据库 |
drop database oldboy; |
删除存在的数据库 |
use mysql; |
表示选择使用一个数据库,相当于cd进入一个数据库 |
show tables; |
查看数据库中表信息 |
select database(); |
表示查看当前所在数据库,类似于pwd命令的功能 |
select user(); |
查看当前登录数据库的用户,类似于whoami命令 |
select * from userG; |
查看user表中所有信息,并且纵行显示 |
select user,host from user; |
查看user表中指定信息,并且横行显示 |
select user,host from mysql.user; |
查看可以登录mysql数据库的目录,以及都可以从哪里进行管理mysql数据库 |
drop user 'user'@'host'; |
删除用户 |
flush privileges; |
刷新权限 |
grant all on .* to user@'host' identified by 'oldboy123'; |
创建用户 |
grant all on .* to Old_Boy@'localhost' identified by 'oldboy123'; |
创建用户(用户名包含大写字母) |
mysqladmin -u root password '123456'; |
为用户设置密码 |
mysqladmin -uroot -p123456 password 654321 |
修改密码,在知道旧密码的前提下 |
delete from mysql.user where user="root" and host="Mysql"; |
遇主机名大写,特殊字符使用drop无法删除 |
五、MySQL多实例配置
1、环境
[root@db ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@db ~]# uname -r 2.6.32-696.el6.x86_64 [root@db ~]# /etc/init.d/iptables status iptables: Firewall is not running. [root@db ~]# getenforce Disabled [root@db ~]# hostname -I 172.19.5.54 172.16.1.54
2、配置多实例
①创建多实例目录授权
mkdir /data/{3306,3307}/data -p chown -R mysql.mysql /data/
②上传多实例配置文件到/下并解压
cd / #上传打包好的多实例配置文件、数据、启动命令 unzip data.zip [root@db /]# tree /data /data ├── 3306 │ ├── my.cnf │ └── mysql └── 3307 ├── my.cnf └── mysql 2 directories, 4 files
③初始化多实例数据库
cd /application/mysql/scripts/ ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3306/data/ --user=mysql #初始化数据库3306 ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3307/data/ --user=mysql #初始化数据库3307
④授权并启动多实例数据库
#5.6.36特殊性:需要创建错误日志文件 touch /data/3306/oldboy_3306.err touch /data/3307/oldboy_3307.err chown -R mysql.mysql /data chmod +x /data/3306/mysql chmod +x /data/3307/mysql /data/3306/mysql start /data/3307/mysql start
配置MySQL命令启动环境变量
方法一: ln -s /application/mysql/bin/* /usr/local/sbin/ 方法二: echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile source /etc/profile
⑤MySQL多实例设置密码及登录
#设置密码: mysqladmin -uroot password 123456 -S /data/3306/mysql.sock mysqladmin -uroot password 123456 -S /data/3307/mysql.sock #登录数据库,指定sock mysql -uroot -p123456 -S /data/3306/mysql.sock mysql -uroot -p123456 -S /data/3307/mysql.sock
查看多实例端口
[root@db ~]# netstat -lntup|grep 330 tcp 0 0 :::3306 :::* LISTEN 17958/mysqld tcp 0 0 :::3307 :::* LISTEN 18166/mysqld
⑥快速搭建3308实例
mkdir -p /data/3308/data cp /data/3306/my.cnf /data/3308/ cp /data/3306/mysql /data/3308/ sed -i 's/3306/3308/g' /data/3308/my.cnf sed -i 's/server-id = 6/server-id = 8/g' /data/3308/my.cnf sed -i 's/3306/3308/g' /data/3308/mysql chown -R mysql:mysql /data/3308 chmod 700 /data/3308/mysql cd /application/mysql/scripts ./mysql_install_db --defaults-file=/data/3308/my.cnf --datadir=/data/3308/data --basedir=/application/mysql --user=mysql chown -R mysql:mysql /data/3308 egrep "server-id|log-bin" /data/3308/my.cnf touch /data/3308/oldboy_3308.err /data/3308/mysql start sleep 5 netstat -lnt|grep 3308
3、MySQL密码找回
①停止MySQL服务
/etc/init.d/mysqld stop
②加参数启动
mysqld_safe --skip-grant-table --user=mysql &
③登录修改密码
set password=password('123456'); flush privileges;
mysql> mysql mysql> update mysql.user set password=PASSWORD('123456') where user='root' and host='localhost';
注:5.7中PASSWORD字段变成了authentication_string
④刷新权限重新MySQL
mysql> flush privileges;
/etc/init.d/mysqld restart
⑤重新登录测试
mysql -uroot -p123456
⑥多实例MySQL密码找回
#停库# mysqld_safe --defaults-file=/data/3306/my.cnf --skip-grant-tables & mysqladmin -uroot -p123456 -S /data/3306/mysql.sock shutdown
六、MySQL管理实战
1、MySQL连接管理
①TPC/IP的方式
mysql -uroot -p123456 -h 10.0.0.54
②套接字文件的方式
mysql -uroot -p123456 -S /data/3306/mysql.sock
2、MySQLD服务器程序构成
3、MySQL用户权限
①查看用户
select user,host from mysql.user;
②创建用户
CREATE USER '用户'@'主机' IDENTIFIED BY '密码'; create user 'oldboy'@'locahost' identified by 'oldboy123'; #只能连接
③工作中常用授权网段方式
方法1:172.16.1.% #%为通配符,匹配所有内容 方法2:172.16.1.0/255.255.255.0 #是不能使用172.16.1.0/24
④查看用户对应的权限
show grants for oldboy@localhostG
⑤删除用户
drop user 'user'@'主机域' 遇主机名大写特殊的删除方法: delete from mysql.user where user='bbs' and host='172.16.1.%'; flush privileges;
⑥创建用户并授权
grant all on *.* to oldboy@'172.16.1.%' identified by '123456'; flush privileges;
⑦权限回收
REVOKE INSERT ON *.* FROM oldboy@localhost;
⑧可以授权的用户权限
INSERT,SELECT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE
⑨博客正确授权
grant select,insert,update,delete,create,drop on blog.* to 'blog'@'172.16.1.%' identified by '123456'; revoke create,drop on blog.* from 'blog'@'172.16.1.%';
3、MySQL初始化配置文件
4、MySQL的关闭
①使用MySQL自带的管理脚本
/etc/init.d/mysqld stop
②使用mysqladmin管理
mysqladmin -uroot -123456 shutdown #必须知道数据库密码
③利用系统进程管理命令关闭MySQL(不建议使用)
kill pid #<==这里的pid为数据库服务对应的进程号。 killall mysqld #<==这里的mysqld是数据库服务对应的进程名字。 pkill mysqld #<==这里的mysqld是数据库服务对应的进程名字
企业高并发场景野蛮粗鲁杀死mysql导致数据库故障
http://oldboy.blog.51cto.com/2561410/1431161 http://oldboy.blog.51cto.com/2561410/1431172