Linux下安装mysql教程

Linux下安装mysql

  1. 到mysql官网下载mysql编译好的二进制安装包,在下载页面Select Platform:选项选择linux-generic,然后把页面拉到底部,64位系统下载Linux - Generic (glibc 2.5) (x86, 64-bit),32位系统下载Linux - Generic (glibc 2.5) (x86, 32-bit)

     Linux下安装mysql教程

    安装前准备:

    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 ./data

    2 创建用户及用户组

    # 用户组
    groupadd mysql
    # 用户 (用户名/密码)
    useradd -g mysql mysql

    3、授权

    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 ;

    生成的临时密码:

    Linux下安装mysql教程

    5 Mysql配置

    vi /etc/my.cnf

    Linux下安装mysql教程

    建立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

    Linux下安装mysql教程

     启动Mysql服务

    # 启动
    service mysql start;
    # 查看启动状态
    service mysql status;

    Linux下安装mysql教程

    系统默认会查找/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

 
 二:开启mysql binlog 日志记录
 

binlog日志,即binary log,是二进制日志文件。它有两个作用,一是增量备份,即只备份新增的内容;二是用于主从复制等,即主节点维护了一个binlog日志文件,从节点从binlog中同步数据。我们可以通过binlog日志恢复数据。下面就介绍一下开启MySQL binlog日志的过程:

1、登录MySQL,查看binlog日志的状态
 登录MySQL后,输入show variables like '%log_bin%';查看到binlog日志为OFF关闭状态;

Linux下安装mysql教程

Linux下安装mysql教程

2、开启MySQL binlog日志

使用vi编辑器修改MySQL的my.cnf配置文件
vi /etc/my.cnf
server_id=2
#log日志文件存放位置
log_bin = /var/bin/mysql/mysql-bin binlog_format = ROW expire_logs_days = 30
Linux下安装mysql教程

注意:每次服务器(数据库)重启,服务器会调用flush logs;,新创建一个binlog日志

进入上面配置的日志存储位置查看日志:
cd  /var/bin/mysql/mysql-bin

Linux下安装mysql教程

 数据恢复语法:

恢复语法
恢复命令的语法格式:
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

Linux下安装mysql教程

然后重启mysql解决:

service mysql restart
 
上一篇:MDK4.6和J-LINK调试出现问题,软件自动关闭,在网上收集整理的解决办法


下一篇:LeetCode 15 输入无序、有重复,输出排重版 3-Sum