1、使用rpm安装mysql
1.环境:Centos7.4
2.卸载MariaDB(CentOS7 默认自带)
注:一定要将mariaDB包和自带mysql包卸载干净,否则安装时出现各种错误,导致失败。
#rpm -qa | grep -i mariadb
#rpm -e --nodeps 强制删除mariadb的所有相关软件包
#find / -iname mariadb或者whereis mariadb 查找是否有相关配置目录及文件,如有,则 rm -rf 删除
3.卸载已有MySQL
//卸载旧版本的Mysql
rpm -qa | grep -i mysql //查看有没有安装mysql
rpm -e MySQL-client-5.6.38-1.el7.x86_64 //如果有,卸载旧版本Mysql及相关依赖包
//删除服务
chkconfig --list | grep -i mysql //查看服务
chkconfig --del mysql //删除服务
//删除mysql分散的文件夹
whereis mysql //查出相应的mysql文件夹
rm -rf /use/lib/mysql //删除
4.安装依赖
注:先装好依赖,再装mysql。即使顺序出错,装完依赖一定要卸载mysql并重新装mysql,否则mysql装上了也会出现各种错误。
#rpm -ivh m4-1.4.16-10.el7.x86_64.rpm
#rpm -ivh perl*(ISO镜像里有,挂载镜像,做个本地yum源即可安装)
#rpm -qa |grep perl-Data-Dumper (如无perl-Data-Dumper依赖包,则上网下载perl-Data-Dumper-2.145-3.el7.x86_64并安装)
#rpm -ivh autoconf-2.69-11.el7.noarch
5.下载MySQL: https://dev.mysql.com/downloads/mysql/
6.增加MySQL组
#cat /etc/group |grep mysql #cat /etc/passwd |grep mysql //检查mysql用户及组是否存在,如果没有执行下面命令
#groupadd mysql //创建组
#useradd -r -g mysql mysql //创建用户并把该用户加入到组mysql,这里的 -r是指该用户是内部用户,不允许外部登录
#passwd mysql //给用户mysql设置密码,需要输入2次
7.安装MySQL
解压mysql
#tar -xvf MySQL-5.6.38-1.el7.x86_64.rpm-bundle.tar
a.安装mysql
#rpm -ivh MySQL-client-5.6.38-1.el7.x86_64.rpm //-i是安装,-v是列出更多详细信息,-h是在安装时列出hash标记
#rpm -ivh MySQL-devel-5.6.38-1.el7.x86_64.rpm
#rpm -ivh MySQL-server-5.6.38-1.el7.x86_64.rpm
#cp /usr/share/mysql/my-default.cnf /etc/my.cnf /设置字符集,连接数等相关参数
b.修改mysql用户密码
#/usr/bin/mysql_install_db
//初始化
systemctl status mysql //查看mysql服务状态 //如果是开启服务状态,用systemctl stop mysql关闭服务
mysqld_safe --user=root --skip-grant-tables --skip-networking & //绕过密码登录,mysql未启动前设置
mysql -u root -p //登录
use mysql //切换数据库
select Host,User,Password from user; //查询用户
UPDATE user SET password=password("root") WHERE user='root'; //修改密码
quit //退出
#systemctl restart mysql //重启mysql服务
#mysql -u root -proot // -proot,p代表password,root是密码
>use mysql //切换数据库
>set password = password('root'); //第一次登陆必须修改mysql密码
>flush privileges; //刷新权限
//赋予任何主机访问数据的权限(远程访问)
>grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
>flush privileges;//刷新权限
>quit //退出
# systemctl restart mysql //重启mysql
c.让防火墙开放开3306端口(Centos7以上是由firewall来管理的)
//查看firewall状态(runing:运行,not runing:没有运行),如果没有运行,用systemctl start firewalld启动
firewall-cmd --state
firewall-cmd --permanent --zone=public --add-port=3306/tcp //添加3306端口
firewall-cmd --reload //重新加载firewall
2、二进制安装mariadb
安装步骤:
1、下载二进制包
下载地址为:https://downloads.mariadb.org/
选择最新版本的mariadb-10.2.8稳定版,进入后下载适用于64位操作系统的Linux x86_64版本
2、解压到安装目录,查看内置的安装信息
下载完成后上传到Linux里,然后解压
tar -xvf mariadb-10.2.8-linux-x86_64.tar.gz
然后进入目录查看里面给定的安装信息
cat INSTALL-BINARY
根据安装里的提醒我们去准备配置文件
3、准备配置文件
根据文件我们要创建一个mysql的用户,它可以对以后的mysql数据库进行管理,同时我们还可以指定mysql的家目录,这样以后它的存储数据就可以独立出来放置了,同时指明shell类型为nologin
useradd -r -m -d /app/date -s /sbin/nologin mysql
移动解压的目录到/usr/local/下,同时还可以创建一个mysql的软连接,这样可以方便以后的版本更新
mv mariadb-10.2.8-linux-x86_64 /usr/local
cd /usr/local ; ln -sv mariadb-10.2.8-linux-x86_64 mysql
然后要把这个目录的管理权限给mysql管理
chown -R root:mysql mysql/
提供mysql的配置文件,解压的包里内置了几个提供的配置文件。放置在support-files这个目录里,我们可以根据你要创建的数据的大小来选择用哪一个配置文件
这里就选择最大的huge配置文件来进行复制了,并把它放入指定的目录下,以避免可能和旧版本的冲突
mkdir /etc/mysql/
cp support-files/my-huge.cnf /etc/mysql/my.cnf
编写里面的配置文件
vim /etc/mysql/my.cnf
在mysqld的后面加入有注释的这三行,目的是为了指明数据存放位置和方便以后对表的管理。
4、准备数据库
./scripts/mysql_install_db --datadir=/app/data --user=mysql
执行后它会给一些警报信息,当然这些警报信息是可以忽略的
5、准备日志文件
准备好日志文件,这样可以有利于以后的排错。当然由于这个服务是mysql管理的,而mysql是对/var/log/这个目录没有写权限的,所以这里我们还需要给mysql一个ACL的特殊权限才行
mkdir /var/log/mariadb/ MariaDB的默认存放目录就为mariadb,所以就创建这样一个存放MariaDB日志的目录
touch /var/log/mariadb/mariadb.log 再创建一个放日志的空文件
setfacl -R -m u:mysql:rwx /var/log/mariadb/mariadb.log 给予mysql一个ACL的特殊权限,使它可以读写日志
6、准备服务脚本
到这里MariaDB二进制包已经安装完毕了。我们现在就要把这个服务启动起来,所以就需要为这个服务准备启动脚本。当然这个脚本也在软件包里有提供,我们只需要复制出来就可以使用了。这个脚本也是放置在support-files这个目录里,它的里面有一个mysql.server的文件就是提供的服务脚本
cp support-files/mysql.server /etc/init.d/mysql 复制到/etc/init.d/放置服务脚本的目录下
chkconfig --add mysql 把这个服务加入到服务列表中去
chkconfig on 把这个服务设定为开机自启,默认为2、3、4、5这三种模式下开机会自动启动
systemclt start mysql 打开这个服务
做完这些后我们就可以进入数据库了,但是它的命令路径不在默认的PATH路径下,而是在/usr/local/mysql/bin/目录下,所以我们每次要进入数据库还需要敲这长长的一串命令。这样太麻烦
所以我们就把这个命令的路径写入到PATH变量里面去,省的以后敲命令麻烦
vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
source /etc/profile.d/mysql.sh 使这个配置文件及时生效
添加完成后就可以使用 mysql 这个命令来直接进入数据库了
7、安全初始化
此时myaql这个服务以经开启了,但是它现在并不安全。因为现在任何用户都可以访问这个数据库,所以我们要给这个数据库设置管理用户,设定访问权限。
3、编译安装mariadb
安装MariaDB之前,首先要安装cmake,另外为了保证不缺依赖,使用yum或者rpm安装依赖:readline-devel,zlib-devel,openssl-devel,libaio-devel并且readline-devel依赖于ncurses-devel,如果使用yum的话会自动将所需依赖安装好,具体命令如下:
yum -y install readline-devel
yum -y install zlib-devel
yum -y install openssl-devel
yum -y install libaio-devel
这里提前预定mysql的安装目录为/usr/local/mysql并且数据目录为/data1/mysql,这里要建立用户和目录,并且赋予mysql用户权限,操作如下:
groupadd -r mysql
useradd -g mysql -s /sbin/nologin mysql
mkdir /usr/local/mysql
mkdir -p /data1/mysql
chown -R mysql:mysql /data1/mysql/
现在可以开始安装了,解压安装包,并进入目录:
tar -xvzf mariadb-10.1.18.tar.gz
cd mariadb-10.1.18/
执行编译安装:
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data1/mysql -DSYSCONFDIR=/etc -DWITHOUT_TOKUDB=1 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
注意:如果万一执行中有了错误,可以执行: rm -f CMakeCache.txt 删除编译缓存,让指令重新执行,否则每次读取这个文件,命令修改正确也是报错
cmake没问题,可以编译并且安装了
make && make install
执行完成也就是安装完成了,现在执行 cd /usr/local/mysql/ 进入mysql安装目录分别执行命令:
chown -R mysql:mysql .
scripts/mysql_install_db --datadir=/data1/mysql --user=mysql
chown -R root .
cp support-files/mysql.server /etc/init.d/mysqld
然后还可以将mysqld添加至系统服务:
chkconfig --add mysqld # 添加至系统服务
chkconfig mysqld on # 设置开机自启动
现在如果启动可能会报错,原因是日志目录没有建立,默认是/var/log/mariadb/mariadb.log,后来也可以修改,执行执行命令:
mkdir /var/log/mariadb 建立日志目录
/etc/init.d/mysqld start 或者 systemctl start mysqld都可以启动mysql服务
启动服务后,还不能马上进入mysql shell界面,原因是刚才编译时执行本地socket为:/tmp/mysql.sock但是查看/etc/my.cnf中配置的位置却是:/var/lib/mysql/mysql.sock,执行命令:
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock 建立软链接即可
为了方便可以将mysql目录添加到环境变量,现在可以执行 ./bin/mysql 直接进入MariaDB交互式界面了,默认root用户密码为空:
4、students表的数据,实现下面的需求,写出sql:
MariaDB [db1]> select * from students;
+—-+——–+——-+——-+——+——-+
| id | name | phone | score | swx | class |
+—-+——–+——-+——-+——+——-+
| 1 | adc | 110 | 86 | m | 1 |
| 2 | zhou | NULL | 80 | f | 1 |
| 3 | fei | NULL | 100 | f | 2 |
| 4 | lin | NULL | 88 | m | 2 |
| 5 | wang | 1000 | 99 | m | 2 |
| 6 | 飞哥 | 10000 | 99 | m | 2 |
+—-+——–+——-+——-+——+——-+
1)在students表中,查询年龄大于25岁,且为男性的同学的名字和年龄
select Name,Age from students where Age>25;
2)以ClassID为分组依据,显示每组的平均年龄
select ClassID,avg(Age) from students group by ClassID
3)显示第2题中平均年龄大于30的分组及平均年龄
select ClassID,avg(Age) from students group by ClassID having avg(Age) > 30
4)显示以L开头的名字的同学的信息
select * from students where name like 'L%';
5)显示TeacherID非空的同学的相关信息
select * from students where TeacherID is not null;