Linux下安装mysql
-
到mysql官网下载mysql编译好的二进制安装包,在下载页面Select Platform:选项选择linux-generic,然后把页面拉到底部,64位系统下载Linux - Generic (glibc 2.5) (x86, 64-bit),32位系统下载Linux - Generic (glibc 2.5) (x86, 32-bit)
安装前准备:
1.先检查Linux中是否存在mysql rpm -qa|grep mysql
2:如果存在,请先执行卸载命令:rpm -e --nodeps mysql-libs --nodeps代表:可能其他地方有依赖mysql,这里强制卸载
3:检查 /tmp文件夹权限,由于mysql安装过程中,会通过mysql用户在/tmp目录下新建tmp_db文件,所以请给/tmp较大的权限
chmod -R 777 /tmp
4:检查各个mysql文件夹是否删除干净
find / -name mysql
结果如下:
/var/lib/mysql
/usr/local/mysql
/usr/lib/mysql
/usr/include/mysql
命令删除:
rm -fr /usr/lib/mysql
rm -fr /usr/include/mysql
注意:卸载后/var/lib/mysql中的数据及/etc/my.cnf不会删除,如果确定没用后就手工删除
rm -f /etc/my.cnf
rm -fr /var/lib/mysql
删除mysql用户及用户组
userdel mysql
groupdel mysql
MySQL正式安装和相关设置(这里以mysql8.0.11为例)
1:上传压缩包到linux
解压压缩包:
tar -zxvf mysql-8.0.11-linux-glibc2.12-i686.tar.gz
# 移动解压后的文件夹至/usr/local
mv /usr/local/src/mysql-8.0.11-linux-glibc2.12-x86_64 /usr/local/
# 重命名
mv ./mysql-8.0.11-linux-glibc2.12-x86_64 mysql-8.0
# 创建文件夹data,存储文件;
cd /usr/local/mysql-8.0/
mkdir ./data2 创建用户及用户组
# 用户组
groupadd mysql
# 用户 (用户名/密码)
useradd -g mysql mysql3、授权
chown -R mysql.mysql /usr/local/mysql-8.0/ # 亲测
或
chown -R mysql .
chgrp -R mysql .4 初始化数据库
# 查看当前所在目录
pwd # 若显示/usr/local/mysql-8.0,请继续执行,否则请先进入此目录/usr/local/mysql-8.0
# 初始化 注意查看是否存在相关目录,若不存在,请新建
./bin/mysqld --user=mysql --basedir=/usr/local/mysql-8.0/ --datadir=/usr/local/mysql-8.0/data/ --initialize ; # 亲测
或
./bin/mysql --user=mysql --basedir=/usr/local/mysql-8.0/ --datadir=/usr/local/mysql-8.0/data/ --initialize ;生成的临时密码:
5 Mysql配置
vi /etc/my.cnf
建立MySQL服务
# 添加Mysql到系统服务
cd /usr/local/mysql-8.0
cp -a ./support-files/mysql.server /etc/init.d/mysql # 若mysqld,以下mysql相应的修改mysqld,如下图所示
chmod +x /etc/init.d/mysql
chkconfig --add mysql
# 检查服务是否生效
chkconfig --list mysql启动Mysql服务
# 启动
service mysql start;
# 查看启动状态
service mysql status;系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,会找不到mysql的相关命令,我们需要做的就是映射一个链接到/usr/bin目录下,相当于建立一个链接文件
首先得知道mysql命令或mysqladmin命令的完整路径,比如mysql的路径是:/usr/local/mysql-8.0/bin/mysql,我们则可以这样执行命令: # ln -s /usr/local/mysql-8.0/bin/mysql /usr/bin
修改root密码
# 进入mysql
mysql -uroot -p
输入初始密码# 如果想要所有主机都可访问,把localhost改成%
alter user 'root'@'localhost' identified with mysql_native_password by '123456';
# 刷新
flush privileges;开放3306端口:
让外网能够访问mysql
a.配置防火墙: firewall-cmd --zone=public --add-port=3306/tcp --permanent(开放3306端口)
systemctl restart firewalld(重启防火墙以使配置即时生效)
查看系统所有开放的端口:firewall-cmd --zone=public --list-ports
常用的mysql操作命令:
1:新建mysql用户:
登录mysql
mysql -u root -p
输入密码
CREATE USER 'test'@'localhost' IDENTIFIED WITH mysql_native_password BY 'qwe123';
注意:此处的"localhost",是指该用户只能在本地登录,不能在另外一台机器上远程登录。如果想远程登录的话,将"localhost"改为"%",表示在任何一台电脑上都可以登录。也可以指定某台机器可以远程登录。如果需要限定IP访问,可以修改localhost-->指定IP地址。
如果还需要设置到另一个ip, 那么就需要重复上面的步骤:
CREATE USER 'test'@'129.xxx.xxx.xx' IDENTIFIED WITH mysql_native_password BY 'qwe123';
2. 为用户授权
这里直接赋所有的权限
GRANT ALL PRIVILEGES ON *.* TO 'test'@'139.xxx.xxx.xx'
如果需要指定权限,就将ALL改为SELECT DELETE UPDATE INSERT等四种权限任选即可grant insert,select,update on test01.* to 'mayiic_dev'@'%';
flush privileges; //刷新系统权限表
3、删除指定的用户:
drop user 'test'@'106.xxx.xx.xx';
4、 查询用户和权限
use mysql;
select Host,User from user where user='root';
show grants for root;1、 显示数据库列表。
show databases;
2、 显示库中的数据表:
# 指定数据库
use mysql;
#显示指定库中的表
show tables;
3、 显示数据表的结构:
describe 表名;
4、 建库与删库:
create database 库名;
drop database 库名;MySQL8.0 忘记 root 密码下如何修改密码?1、vim /etc/my.cnf,添加 skip-grant-table(跳过权限验证)
2、重启 mysql 服务
systemctl restart mysqld //重启服务
3、刷新权限表:flush privileges;
4、mysql 登录:mysql -uroot -p(无需密码)
5、密码重置(Mysql8.0 + 有变化)
use mysql;
update user set authentication_string='' where user='root'; alter user 'root'@'localhost' identified with mysql_native_password by '123456';6、vim /etc/my.cnf,删除 skip-grant-table
7、再次重启 mysql 服务,使用新密码登录 mysql
binlog日志,即binary log,是二进制日志文件。它有两个作用,一是增量备份,即只备份新增的内容;二是用于主从复制等,即主节点维护了一个binlog日志文件,从节点从binlog中同步数据。我们可以通过binlog日志恢复数据。下面就介绍一下开启MySQL binlog日志的过程:
1、登录MySQL,查看binlog日志的状态
登录MySQL后,输入show variables like '%log_bin%';查看到binlog日志为OFF关闭状态;
2、开启MySQL binlog日志
vi /etc/my.cnf
server_id=2
#log日志文件存放位置
log_bin = /var/bin/mysql/mysql-bin binlog_format = ROW expire_logs_days = 30
注意:每次服务器(数据库)重启,服务器会调用flush logs;,新创建一个binlog日志
cd /var/bin/mysql/mysql-bin
数据恢复语法:
恢复语法
恢复命令的语法格式:
mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名
常用参数选项解释:
--start-position=780 起始pos点
--stop-position=904 结束pos点
--start-datetime="2019-3-27 12:04:08" 起始时间点
--stop-datetime="2019-3-27 12:49:46" 结束时间点
--database=my_test 指定只恢复my_test数据库(一台主机上往往有多个数据库,只限本地log日志) !!!!Ubuntu我没用熟悉吧 牢记 在mysqlbinlog和mysq前面都要加上sudo!!!!
For example 指定pos结束点恢复(部分恢复)
恢复到780节点
sudo mysqlbinlog mysql-bin.000002 --stop-position 780 | sudo mysql -uroot -p my_test
binlog 日志文件转sql
进入mysql 的安装目录bin 目录执行----》mysql-bin.000011的文件路径
mysqlbinlog --base64-output=decode-rows -v mysql-bin.000011 -d db1 > db1.sql //将row格式的binlog日志文件base64解析后转入文件,-v代表换行展示
mysqlbinlog --start-date="2017-08-12 15:00:19" --stop-date="2017-08-12 15:30:19" mysql-bin.000011 -d db1 > db1.sql //选择时间范围导出
执行sql语句时报错:
Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nona
解决:
SELECT @@sql_mode;
查询出来的值为:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
修改mysql的配置文件:
vim /etc/my.cnf
加入上面查询出来的内容,去掉ONLY_FULL_GROUP_BY
eg:
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
然后重启mysql解决:
service mysql restart