LAMP架构
- Linux+Apache(httpd)+MySQL+PHP
- 三个角色可以在一台机器上,也可以分开(Apache(httpd)+PHP必须要在一起)
MySQL/Mariadb介绍
- MySQL最新版本5.7GA/8.0DMR
- MySQL5.6变化比较大,5.7性能上有很大提升
- Mariadb为MySQL的一个分支,官网,最新版本10.2
- MariaDB主要由SkySQL公司(现更名为MariaDB公司)维护,SkySQL公司由MySQL原作者带领大部分原班人马创立.
- Mariadb5.5版本对应MySQL的5.5,Mariadb10.0对应MySQL5.6
- Community 社区版本——>开源的版本,免费使用
- Enterprise 企业版
- GA(Generally Available)指通用版本,在生产环境中用的——>已经很稳定的版本,一般下载也是GA版本
- DMR(Development Milestone Release)开发里程碑发布版
- RC(Release Candidate)发行候选版本
- Beta开放测试版本
- Alpha内部测试版本
1、MySQL安装
- MySQL的几个常用安装包:rpm、源码、二进制免编译
- cd /usr/local/src //切换到下载源码包的目录
[root@aminglinux ~]# cd /usr/local/src
[root@aminglinux src]# wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz --2018-06-23 10:06:13-- http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz 正在解析主机 mirrors.sohu.com (mirrors.sohu.com)... 221.236.12.140 正在连接 mirrors.sohu.com (mirrors.sohu.com)|221.236.12.140|:80... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:314581668 (300M) [application/octet-stream] 正在保存至: “mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz” 100%[==============================================>] 314,581,668 23.2KB/s 用时 95m 35s 2018-06-23 11:41:53 (53.6 KB/s) - 已保存 “mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz” [314581668/314581668])
- tar zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz //解压
[root@aminglinux src]# tar zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz mysql-5.6.35-linux-glibc2.5-x86_64/README mysql-5.6.35-linux-glibc2.5-x86_64/data/test/db.opt mysql-5.6.35-linux-glibc2.5-x86_64/lib/libmysqlclient.a mysql-5.6.35-linux-glibc2.5-x86_64/lib/libmysqlclient.so.18 mysql-5.6.35-linux-glibc2.5-x86_64/lib/libmysqlclient.so
- mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql //改名,并放到/usr/local/mysql
[root@aminglinux src]# mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql
- cd /usr/local/mysql //进入到该目录下
[root@aminglinux src]# cd /usr/local/mysql [root@aminglinux mysql]# ls bin data include man README share support-files COPYING docs lib mysql-test scripts sql-bench
- useradd mysql //创建一个mysql用户
[root@aminglinux mysql]# useradd mysql
- mkdir /data/ //创建一个目录,是为了存放mysql的数据,把数据目录放到这个目录下
[root@aminglinux mysql]# mkdir /data/
- ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql //初始化,所谓初始化就是要生成/data/mysql ,因为mysql要想启动,首先要有一个自带的库,自带的库叫mysql
[root@aminglinux mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db: Data::Dumper
- 出现一个提示,缺少Dumper模块【从字面意义上分析,它是说 Perl modules,(因为这属于一个Perl脚本),所以在初始化的时候,依赖于Perl(Perl、python和PHP三种比较流行的三种脚本语言;)
- 解决思路(思路,在缺少模块,缺少包,那就去安装,在安装的不知道包和模块的名称,就去模糊搜索;模糊搜索yum list |grep perl |grep -i dumper (-i 忽略大小写)】
8.1.安装Dumper包:yum list |grep perl |grep -i dumper
[root@aminglinux mysql]# yum list |grep perl |grep -i dumper perl-Data-Dumper.x86_64 2.145-3.el7 base perl-Data-Dumper-Concise.noarch 2.020-6.el7 epel perl-Data-Dumper-Names.noarch 0.03-17.el7 epel perl-XML-Dumper.noarch [root@aminglinux mysql]# yum install -y perl-Data-Dumper.x86_64 实际上是安装perl-Data-Dumper.x86_64包 已加载插件:fastestmirror
重新初始化
[root@aminglinux mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql Installing MySQL system tables...2018-06-23 13:16:43 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). .... [root@aminglinux mysql]# echo $?检测是否安装成功 0
9.cp support-files/my-default.cnf /etc/my.cnf //拷贝配置文件到/etc/并改名my.cnf
[root@aminglinux mysql]# ls support-files/ binary-configure my-default.cnf mysql-log-rotate magic mysqld_multi.server mysql.server [root@aminglinux mysql]# ls support-files/my-default.cnf 查看配置文件 support-files/my-default.cnf [root@aminglinux mysql]# cp support-files/my-default.cnf /etc/my.cnf 拷贝配置文件到/etc/并改名my.cnf,确认覆盖 cp:是否覆盖"/etc/my.cnf"? y
10.cp support-files/mysql.server /etc/init.d/mysqld //拷贝启动脚本到启动目录
[root@aminglinux mysql]# cp support-files/mysql.server /etc/init.d/mysqld [root@aminglinux mysql]# vi /etc/init.d/mysqld
- 编辑定义vi /etc/init.d/mysqld // -定义basedir和datadir路径
basedir=/usr/local/mysql datadir=/data/mysql
11.权限变更:chmod 755 /etc/init.d/mysqld
- 默认就是755权限
- chkconfig --add mysqld //添加到系统服务使其开机启动
[root@aminglinux mysql]# chmod 755 /etc/init.d/mysqld^C [root@aminglinux mysql]# ls -l /etc/init.d/mysqld -rwxr-xr-x 1 root root 10903 6月 23 13:40 /etc/init.d/mysqld [root@aminglinux mysql]# chkconfig --add mysqld [root@aminglinux mysql]# chkconfig --list 注:该输出结果只显示 SysV 服务,并不包含 原生 systemd 服务。SysV 配置数据 可能被原生 systemd 配置覆盖。 要列出 systemd 服务,请执行 'systemctl list-unit-files'。 查看在具体 target 启用的服务请执行 'systemctl list-dependencies [target]'。 mysqld 0:关 1:关 2:开 3:开 4:开 5:开 6:关 netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关 network 0:关 1:关 2:开 3:关 4:开 5:开 6:关
- 也可以命令启动服务:/etc/init.d/mysqld start 或service mysqld start
[root@aminglinux mysql]# service mysqld start 启动服务 Starting MySQL.Logging to '/data/mysql/aminglinux.err'. .............................................. SUCCESS! [root@aminglinux mysql]# ps aux |grep mysql 查看进程 root 1716 0.0 0.1 11772 1568 pts/0 S 13:49 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/aminglinux.pid mysql 1824 61.5 44.5 973052 449492 pts/0 Sl 13:49 0:49 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/aminglinux.err --pid-file=/data/mysql/aminglinux.pid root 1947 0.0 0.0 112676 984 pts/0 S+ 13:50 0:00 grep --color=auto mysq [root@aminglinux mysql]# [root@aminglinux mysql]# netstat -lntp 查看监听端口 Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1033/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1117/master tcp6 0 0 :::22 :::* LISTEN 1033/sshd tcp6 0 0 ::1:25 :::* LISTEN 1117/master tcp6 0 0 :::3306 :::* LISTEN 1824/mysqld
kill和killall区别
- mysql在实时的读写数据,写的速度很快,有可能写入的数据保存在内存里(缓存中),如果这部分缓存并没有同步到磁盘里去,而直接去kill 掉,就意味着你的数据丢失,而使用killall 命令,则会先停止当前的写读操作,然后把没有完成写入到磁盘里的数据在慢慢写入到磁盘里去,直到写完之后才会把进程杀死。
- 这就意味着如果将来有一天mysqld的进程始终杀不死,等待一分钟还是没有杀死,那说明你的数据量很大,它正在慢慢的写入到磁盘到磁盘里去,这个时候不要强制的使用 kill 9 杀进程,这样非常有可能丢数据,还会损坏你的表。
mysql常用的两种引擎
- innodb引擎,比较大,和oracle类似
- myisam引擎,存储空间、存储量都比较小
2.安装mariadb
1.cd /usr/local/src //切换到下载源码包的目录
[root@aminglinux ~]# cd /usr/local/src
[root@aminglinux src]# wget https://downloads.mariadb.com/MariaDB/mariadb-10.2.6/bintar-linux-glibc_214-x86_64/mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz --2018-06-23 16:54:04-- https://downloads.mariadb.com/MariaDB/mariadb-10.2.6/bintar-linux-glibc_214-x86_64/mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz 正在解析主机 downloads.mariadb.com (downloads.mariadb.com)... 51.255.94.155, 2001:41d0:1004:249b:: 正在连接 downloads.mariadb.com (downloads.mariadb.com)|51.255.94.155|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:541295045 (516M) [application/octet-stream] 正在保存至: “mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz”
3.tar zxvf mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz
[root@aminglinux src]# tar zxvf mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz
4.mv mariadb-10.2.6-linux-glibc_214-x86_64 /usr/local/mariadb 解压的包移动到/usr/local下,并改名叫mariadb——>这里的改名,是为了之前安装mysql的名字有所区分
[root@aminglinux src]# mv mariadb-10.2.6-linux-glibc_214-x86_64 /usr/local/mariadb
5.cd /usr/local/mariadb 进入cd /usr/local/mariadb目录
[root@aminglinux ~]# cd /usr/local/mariadb [root@aminglinux mariadb]#
6.创建mysql用户,创建data——>这里因为之前安装mysql的时候,已经创建过了所以不需要创建useradd mysql 7../scripts/mysql_install_db --user=mysql --basedir=/usr/local/mariadb/ --datadir=/data/mariadb 初始化并定义路径basedir=/usr/local/mariadb
[root@aminglinux mariadb]# ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mariadb/ --datadir=/data/mariadb Installing MariaDB/MySQL system tables in '/data/mariadb' ... OK ...... [root@aminglinux mariadb]# echo $? 检测命令 0
8.cp support-files/my-small.cnf /usr/local/mariadb/my.cnf 拷贝配置文件
[root@aminglinux mariadb]# cd /usr/local/mariadb/ [root@aminglinux mariadb]# ls support-files/ binary-configure my-large.cnf mysql-log-rotate wsrep_notify magic my-medium.cnf mysql.server my-huge.cnf my-small.cnf policy my-innodb-heavy-4G.cnf mysqld_multi.server wsrep.cnf
- 配置文件存放在/usr/local/mariadb/suport/files/目录下,会看到有很多配置文件
- my-small.cnf、my-medium.cnf、my-large.cnf这三个配置文件区别在于 缓存的数值大小不同
- 根据内存大小的不同,它可以给你指定合适的缓存,这样能够让你的mysql达到更高效的性能
- 若是内存有几十个G,可以使用my-huge.cnf拷贝过去,然后根据实际的运行情况 ,去适当的调整参数;这里我们使用最小的my-small.cnf
[root@aminglinux mariadb]# vim support-files/my-small.cnf # The MySQL server [mysqld] port = 3306 socket = /tmp/mysql.sock skip-external-locking key_buffer_size = 16K max_allowed_packet = 1M table_open_cache = 4 sort_buffer_size = 64K read_buffer_size = 256K read_rnd_buffer_size = 256K net_buffer_length = 2K thread_stack = 240K
- 拷贝文件到/usr/local/mariadb/my.cnf(mariadb这里就不放到/etc/my.cnf下了,因为这是mysql用的,这里为了区分到/usr/local/mariadb/my.cnf)
[root@aminglinux mariadb]# cp support-files/my-small.cnf /usr/local/mariadb/my.cnf [root@aminglinux mariadb]#
9.编辑配置文件vim /usr/local/mariadb/my.cnf //定义basedir和datadir (这里面配置不用修改)
[root@aminglinux mariadb]# vim /usr/local/mariadb/my.cnf
10.拷贝启动脚本到/etc/init.d/mariadb并编辑:
- cp support-files/mysql.server /etc/init.d/mariadb
- vim /etc/init.d/mariadb //定义basedir、datadir、conf以及启动参数
[root@aminglinux mariadb]# cp support-files/mysql.server /etc/init.d/mariadb [root@aminglinux mariadb]# vim /etc/init.d/mariadb # If you change base dir, you must also change datadir. These may get # overwritten by settings in the MySQL configuration files. basedir=/usr/local/mariadb 定义basedir datadir=/data/mariadb 定义datadir conf=$basedir/my.cnf 自定义参数(配置文件在/etc下不用定义这个参数)
配置启动命令:在一般模式下,搜索 /start 启动命令
在 $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" "$@" &中,增加--defaults-file="$conf"; 最后为 $bindir/mysqld_safe --defaults-file="$conf" --datadir="$datadir" --pid-file="$mysqld_pid_file_path" "$@" &
11.在启动前,先查看是否有mysql服务在启动;因前面安装有MySQL,并启了服务;所以要关掉
[root@aminglinux mariadb]# ps aux |grep mysql root 1039 0.0 0.0 115388 596 ? S 16:44 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/aminglinux.pid mysql 1166 0.2 44.8 973052 452588 ? Sl 16:44 0:48 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/aminglinux.err --pid-file=/data/mysql/aminglinux.pid root