Mysql介绍及安装
1 数据库的介绍
1.1 什么是数据库
数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构上指数据的组织形式或数据之间的联系)来组织、存储的,我们可以通过数据库提供的多种方法来管理数据库里的数据。
1.2 数据的种类
数据库一共分为三大类,分别为层次式数据库、网络式数据库和关系型数据库。这里我们主要关注的是关系型数据库和非关系型数据库(NOSQL)两种。
1.2.1 关系型数据库介绍
1)关系型数据库我的理解是二元关系(即二维表格的形式)
2)Mysql和Oracle数据库,运维里面最常用的是Mysql
3)通过sql查询语句存储数据
4)保持数据一致性方面很强
1.2.2 非关系型数据库介绍
非关系型数据库也被称为NOSQL数据库,这里的NOSQL的本意是“not only sql”,指的是非关系性数据库。
1)NOSQL不是否定关系型数据库,而是作为关系数据库的一个重要补充
2)NOSQL为了高性能和高并发而生
3)NOSQL典型产品是Memcached、Redis、Mongodb等
补充:
1、面向高性能并发读写的key-value数据库:key-value数据库的主要特点即使具有极高的并发读写性能:代表Redis
2、面向海量数据访问的文档型数据库:这类数据库特点是可以在海量的数据中快速的查询数据,典型代表为MongoDB
3、面向可扩展性的分布式数据库:这类数据库想解决的问题就是传统数据库存在可扩展性上的缺陷,典型代表为Cassandra等
1.2.3 非关系型数据库种类
键值存储数据库
键值数据库就类似传统语言中使用的哈希表。可以通过key来添加、查询或者删除数据,因为使用key主键访问,所以会获得很高的性能及扩展性。
键值数据库主要是使用一个哈希表,这个表中有一个特定的键和一个指证指向特定的数据。Key/value模型对于it系统来说的优势在于简单、易部署、高并发
1.2.4 Redis特点
1)支持内存缓存,这个功能相当于memcahed
2)支持持久化存储,这个功能相当于memcachedb,ttserver
3)数据库类型更丰富
4)支持主从集群,分布式
5)支持队列等特殊功能
1.3 Mysql数据库介绍
Mysql数据库是互联网领域里一款最重要的、深受广大用户欢迎的开源关系型数据库软件之一,它是一种关系类型数据库管理系统,关系型数据库的特点是将数据库保存在不同的表中,在将这些表放入不同的数据库中,而不是将所有的书统一放在一个大仓库里,这样的设计增加了mysql的读取速度,灵活可管理性也得到了很大提高,访问以及管理mysql数据库的最常用标准化语言为sql查询语言。
1.3.1 Mysql数据库的特点
1)Mysql性能卓越,服务稳定,很少会出现异常宕机
2)Mysql开放源代码且无版权制约,自主性以及使用成本低
3)Mysql历史悠久,社区活跃,遇到问题,可以快速的找到帮助
2 Mysql二进制安装
1、下载并上传软件至/usr/local/src[root@mysql-36 ~]# cd /usr/local/src[root@mysql-36 src]# lsmysql-5.7.31-linux-glibc2.12-x86_64.tar.gz2、解压软件[root@mysql-36 src]# tar xf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz[root@mysql-36 src]# mv mysql-5.7.31-linux-glibc2.12-x86_64 ../mysql-5.7.31[root@mysql-36 src]# cd ..[root@mysql-36 local]# ln -s mysql-5.7.31/ mysql3、用户的创建处理原始环境[root@mysql-36 ~]# yum remove mariadb-libs-5.5.60-1.el7_5.x86_64 -y[root@mysql-36 ~]# rpm -qa |grep mariadb[root@mysql-36 ~]# useradd -s /sbin/nologin mysql4、设置环境变量vim /etc/profileexport PATH=/usr/local/mysql/bin:$PATH[root@mysql-36 ~]# source /etc/profile[root@mysql-36 ~]# mysql -Vmysql Ver 14.14 Distrib 5.7.31, for linux-glibc2.12 (x86_64) using EditLine wrapper5、创建数据路径并授权添加一块新磁盘模拟数据盘格式化并挂载磁盘[root@mysql-36 ~]# mkfs.xfs /dev/sdb[root@mysql-36 ~]# mkdir /data[root@mysql-36 ~]# blkid[root@mysql-36 ~]# vim /etc/fstabUUID=7dfc98e4-6ab0-450e-adc6-c26fe729e6e0 /data xfs defaults 0 0[root@mysql-36 ~]# mount -a[root@mysql-36 local]# df -h文件系统 容量 已用 可用 已用% 挂载点/dev/sda3 17G 2.9G 15G 17% /devtmpfs 903M 0 903M 0% /devtmpfs 912M 0 912M 0% /dev/shmtmpfs 912M 8.6M 904M 1% /runtmpfs 912M 0 912M 0% /sys/fs/cgroup/dev/sdb1 10G 166M 9.9G 2% /data/dev/sda1 1014M 135M 880M 14% /boottmpfs 183M 0 183M 0% /run/user/0授权chown -R mysql.mysql /usr/local/mysql/*chown -R mysql.mysql /data6、初始化数据(创建系统数据)[root@mysql-36 ~]# mkdir /data/mysql/data -p[root@mysql-36 ~]# chown -R mysql.mysql /data[root@mysql-36 ~]# mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data说明:--initialize 参数:1. 对于密码复杂度进行定制:12位,4种2. 密码过期时间:180天3. 给root@localhost用户设置临时密码报错:mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory解决:[root@mysql-36 ~]# yum install -y libaio-devel[root@mysql-36 ~]# mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data2019-06-13T04:21:27.706564Z 1 [Note] A temporary password is generated for root@localhost: =mrV)_16is4U--initialize-insecure 参数:无限制,无临时密码[root@mysql-36 /data/mysql/data]# \rm -rf /data/mysql/data/*[root@mysql-36 ~]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data7、配置文件的准备cat >/etc/my.cnf <<EOF[mysqld]user=mysqlbasedir=/usr/local/mysqldatadir=/data/mysql/datasocket=/tmp/mysql.sockserver_id=6port=3306[mysql]socket=/tmp/mysql.sockEOF8、启动数据库第一种:用service[root@mysql-36 /etc/init.d]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld[root@mysql-36 /etc/init.d]# service mysqld restart第二种:用systemd注意: sysv方式启动过的话,需要先提前关闭,才能以下方式登录cat >/etc/systemd/system/mysqld.service <<EOF[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnfLimitNOFILE = 5000EOF[root@mysql-36 local]# systemctl enable mysqld[root@mysql-36 local]# systemctl start mysqld9、登录数据库,修改密码[root@mysql-36 ~]# mysqlmysql> alter user 'root'@'localhost' identified by '123456';mysql> flush privileges;
2.1 Mysql的启动和关闭

1、Mysql正常的启动和停止centos6或者7:/etc/init.d/mysqld start|stop|statuscentos7:systemctl start mysqld #启动mysqlsystemctl stop mysqld #停止mysqlsystemctl restart mysqld #重启mysql2、维护性的任务或者测试我们偶尔会有维护性的任务或者测试的时候,可以使用mysqld_safe[root@db01 ~]# mysqld_safe & #后台启动mysql当然我们也可以加一些参数来运行,比如破密码:mysqld_safe --skip-grant-tables --skip-networking &当然这个也会读取/etc/my.cnf的内容,但是如果冲突,命令行优先级最高
2.2 Mysql初始化配置
用于控制Mysql的启动影响到客户端的连接
2.2.1 初始化配置的方法
1、通过预编译的方式来初始化配置2、通过配置文件的方式来初始化配置3、命令行参数(仅限于mysqld_safe)
2.2.2 初始配置文件
#1、初始化配置文件的默认读取路径[root@db01 ~]# mysqld --help --verbose |grep my.cnf/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf注:默认情况下,MySQL启动时,会依次读取以上配置文件,如果有重复选项,会以最后一个文件设置的为准。但是,如果启动时加入了--defaults-file=xxxx时,以上的所有文件都不会读取#2、配置文件的书写方式[标签]配置项=xxxx标签类型:服务端、客户端服务器端标签:[mysqld][mysqld_safe][server]客户端标签:[mysql][mysqldump][client]配置文件的示例展示:[root@db01 ~]# cat /etc/my.cnf[mysqld]user=mysqlbasedir=/app/mysqldatadir=/data/mysqlsocket=/tmp/mysql.sockserver_id=6port=3306log_error=/data/mysql/mysql.log[mysql]socket=/tmp/mysql.sock
2.3 Mysql客户端命令
mysql常用参数:-u 用户名,默认为root-p 用户密码,建议使用-p,默认为空密码-h 服务器主机,默认为localhost-P 服务器端口-S socket文件所在的路径-e 免交互执行命令-D 指定默认数据库< 导入SQL脚本[root@db01 ~]# mysql -uroot -p -h 10.0.0.51 -P3306Enter password:mysql> select @@socket;+-----------------+| @@socket |+-----------------+| /tmp/mysql.sock |[root@db01 ~]# mysql -uroot -p -S /tmp/mysql.sockEnter password:[root@db01 ~]# mysql -uroot -p -e "select user,host from mysql.user;"Enter password:+---------------+-----------+| user | host |+---------------+-----------+| abc | 10.0.0.% || app | 10.0.0.% || root | 10.0.0.% || mysql.session | localhost || mysql.sys | localhost || root | localhost |+---------------+-----------+[root@db01 ~]# mysql -uroot -p < world.sqlEnter password:
3 Mysql修改密码和忘记密码怎么办?
1、管理员密码的设定(root@localhost)[root@mysql-36 ~]# mysqladmin -uroot -p password oldboy123Enter password:2、管理员用户密码忘记了?--skip-grant-tables #跳过授权表--skip-networking #跳过远程登录,只允许本地访问,这个是为了安全起见2.1、关闭数据库[root@mysql-36 ~]# systemctl stop mysqld2.2、启动数据库到维护模式[root@mysql-36 ~]# mysqld_safe --skip-grant-tables --skip-networking &2.3、登录并修改密码[root@mysql-36 ~]# mysqlmysql> alter user root@'localhost' identified by '123456';ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statementmysql> flush privileges;Query OK, 0 rows affected (0.00 sec)mysql> alter user root@'localhost' identified by '123456';Query OK, 0 rows affected (0.00 sec)mysql> quit2.4、关闭数据库,正常启动验证[root@mysql-36 ~]# systemctl start mysqld[root@mysql-36 ~]# mysql -uroot -p123456mysql>mysql5.7密码方面的新特性:1.初始化完成后,会生成临时密码(显示到屏幕上,并且会往日志中记一份)2.密码复杂度:长度:超过12位 复杂度:字符混乱组合3.密码过期时间180天mysqladmin命令mysqladmin -uroot -p123456 ping #查看mysql服务是否正常,如果正常提示mysqld is alivemysqladmin -uroot -p123456 shutdown #关闭mysql服务,但mysqladmin命令无法开启mysqladmin -uroot -p123456 password 123 #修改密码
4 Mysql安全配置向导
安装完mysql-server 会提示可以运行mysql_secure_installation。运行mysql_secure_installation会执行几个设置:
- 为root用户设置密码
- 删除匿名账号
- 取消root用户远程登录
- 删除test库和对test库的访问权限
- 刷新授权表使修改生效
通过以上几项可以提高Mysql的安全性,建议生产环境运行这个命令,具体操作如下:
[root@localhost ~]# mysql_secure_installationNOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQLSERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!.....Enter current password for root (enter for none):<-初次运行直接回车OK, successfully used password, moving on…Setting the root password ensures that nobody can log into the MySQLroot user without the proper authorisation.Set root password? [Y/n] #是否设置root用户密码,输入y并回车或直接回车New password: #设置root用户的密码Re-enter new password: #再输入一次你设置的密码Password updated successfully!Reloading privilege tables..… Success!By default, a MySQL installation has an anonymous user, allowing anyoneto log into MySQL without having to have a user account created forthem. This is intended only for testing, and to make the installationgo a bit smoother. You should remove them before moving into aproduction environment.Remove anonymous users? [Y/n] #是否删除匿名用户,生产环境建议删除,所以直接回车… Success!Normally, root should only be allowed to connect from localhost。Thisensures that someone cannot guess at the root password from the network.Disallow root login remotely? [Y/n] #是否禁止root远程登录,根据自己的需求选择Y/n并回车,建议禁止… Success!By default, MySQL comes with a database named test that anyone canaccess. This is also intended only for testing, and should be removedbefore moving into a production environment.Remove test database and access to it? [Y/n] #是否删除test数据库,直接回车- Dropping test database…… Success!- Removing privileges on test database…… Success!Reloading the privilege tables will ensure that all changes made so farwill take effect immediately.Reload privilege tables now? [Y/n] #是否重新加载权限表,直接回车… Success!Cleaning up…All done! If you've completed all of the above steps, your MySQLinstallation should now be secure.Thanks for using MySQL!
5 Mysql多实例安装
4.1 准备多个目录mkdir -p /data/330{7,8,9}/data4.2 准备配置文件cat > /data/3307/my.cnf <<EOF[mysqld]basedir=/usr/local/mysqldatadir=/data/3307/datasocket=/data/3307/data/mysql.socklog_error=/data/3307/mysql.logport=3307server_id=7log_bin=/data/3307/mysql-binEOFcat > /data/3308/my.cnf <<EOF[mysqld]basedir=/usr/local/mysqldatadir=/data/3308/datasocket=/data/3308/data/mysql.socklog_error=/data/3308/mysql.logport=3308server_id=8log_bin=/data/3308/mysql-binEOFcat > /data/3309/my.cnf <<EOF[mysqld]basedir=/usr/local/mysqldatadir=/data/3309/datasocket=/data/3309/data/mysql.socklog_error=/data/3309/mysql.logport=3309server_id=9log_bin=/data/3309/mysql-binEOF4.3 初始化三套数据mv /etc/my.cnf /etc/my.cnf.bakmysqld --initialize-insecure --user=mysql --datadir=/data/3307/data --basedir=/usr/local/mysqlmysqld --initialize-insecure --user=mysql --datadir=/data/3308/data --basedir=/usr/local/mysqlmysqld --initialize-insecure --user=mysql --datadir=/data/3309/data --basedir=/usr/local/mysql4.4 systemd管理多实例cd /etc/systemd/systemcp mysqld.service mysqld3307.servicecp mysqld.service mysqld3308.servicecp mysqld.service mysqld3309.servicevim mysqld3307.service# 修改为:ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3307/my.cnfvim mysqld3308.service# 修改为:ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3308/my.cnfvim mysqld3309.service# 修改为:ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf4.5 授权chown -R mysql.mysql /data/*4.6 启动systemctl start mysqld3307.servicesystemctl start mysqld3308.servicesystemctl start mysqld3309.service4.7 验证多实例netstat -lnp|grep 330mysql -uroot -S /data/3307/data/mysql.sockmysql -uroot -S /data/3308/data/mysql.sockmysql -uroot -S /data/3309/data/mysql.sock
