zoukankan      html  css  js  c++  java
  • MySQL 单实例安装等操作

    ---MySQL 单实例安装等操作

    安装注意以下几点
    1.软件安装目录: /usr/local/mysql
    2.数据存放目录: /data/
    3.配置文件存放目录:/etc/my.cnf

    启动过程
    1.需要初始化
    2.启动

    --如果想MySQL 开机自动启动,需要在 /etc/rc.local 文件中添加启动MySQL的命令
    /usr/local/mysql/bin/mysqld_safe --defaults-file=/ect/my.cnf &

    一、MySQL单实例安装
    cd /usr/local/
    1.解压MySQL二进制包
    tar -zxvf mysql-5.6.16-linux-glibc2.5-x86_64.tar.gz

    -v ,输出详细解压内容

    2.删除解压前的 tar 包
    rm -rf mysql-5.6.16-linux-glibc2.5-x86_64.tar.gz

    3.更名
    mv mysql-5.6.16-linux-glibc2.5-x86_64/ mysql
    --注:为何要改名?不让别人轻易看到版本信息

    4.创建MySQL用户
    useradd mysql

    5.给MySQL安装目录授权
    chown -R mysql:mysql mysql

    6.创建数据存放目录
    mkdir -p /data/mysql

    cd /data/
    ls --返回 mysql

    7.给MySQL数据存放目录授权

    chown -R mysql.mysql mysql

    8.上传 MySQL 配置文件 my.cnf(单实例);删除系统自带my.cnf ,并将上传文件 更名为 :my.cnf

    cd /ect/
    rm -rf my.cnf
    rz my.cnf_dan

    mv my.cnf_dan my.cnf

    9.初始化数据库

    cd /usr/local/mysql/scripts/

    ./mysql_install_db --help

    ./mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql/ --defaults-file=/ect/my.cnf --user=mysql

    10.配置环境变量并且生效
    vim /etc/profile

    文本行尾添加一行内容:
    export PATH=$PATH:/usr/local/mysql/bin

    source /etc/profile

    11.启动数据库

    cd /usr/local/mysql/bin/

    pwd
    /usr/local/mysql/bin

    ./mysqld_safe --help

    ./mysqld_safe --defaults-file=/etc/my.cnf & ---后台启动数据库

    12.查看 MySQL进程

    ps -ef|grep mysql


    [root@node1 bin]# ps -ef | grep mysql

    root 2218 2028 0 18:54 pts/0 00:00:00 /bin/sh ./mysqld_safe --defaults-file=/etc/my.cnf
    mysql 2845 2218 0 18:54 pts/0 00:00:01 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql
    --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/error.log --open-files-limit=3072 --pid-file=/data/mysql/node1.pid --socket=/tmp/mysql.sock --port=3306
    root 23915 2028 0 19:17 pts/0 00:00:00 grep mysql

    [root@node1 bin]# cat /data/mysql/node1.pid

    2845

    mysql是一个单进程多线程的数据库,这唯一的进程就是pid

    oracle是一个多进程的数据库

    ---安装过程遇到的报错

    ---启动数据库
    cd /usr/local/mysql
    cd bin
    ./mysqld_safe --help
    --------default-file 默认配置文件
    ./mysqld_safe --default-file=/etc/my.cnf & ----后台启动

    ---查询是否启动成功
    ps -ef|grep mysql

    ----报错
    /data/mysql/node3.pid ended --- 这个进程 结束了;也就是执行失败了;看看为啥失败

    vi /data/mysql/error.log
    [ERROR] Fatal error :Can't open and lock privilege tables :table 'mysql.user' doesn't exist

    ---原因是没有进行初始化

    --初始化权限表
    cd /usr/local/mysql

    ./scripts/mysql_install_db --help

    ./scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql --default-file=/etc/my.cnf

    ---上面命令出现两个OK 表示成功


    cd /data/mysql
    ls ---查询多了 mysql test 等库相关信息

    --启动数据库
    cd /data/mysql
    ./bin/mysqld_safe --help

    ./bin/mysqld_safe --default-file=/usr/local/mysql &


    ----又报错
    /data/mysql/node3.pid ended --- 这个进程 结束了;也就是执行失败了;看看为啥失败

    vi /data/mysql/error.log

    Aborting 上面报

    'data/mysql/mysql-bin.index' not found (Errcode:13-permission denied)


    ---权限问题

    cd /data/mysql
    ll ---发现 mysql-bin.*** 属主属组都是root

    ---原因是刚才创建授权表的时候使用的 root用户

    cd /usr/local/mysql

    ./scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql --default-file=/etc/my.cnf

    ---此动作应该 mysql 用户执行

    ./scripts/mysql_install_db --help

    ./scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql --default-file=/etc/my.cnf --user=mysql

    --如果确实忘记添加 --user=mysql 则手动修改 文件 对应的属主属组

    cd /data
    chown -R mysql.mysql mysql

    --验证一下

    cd mysql

    ls

    ---重新启动
    cd /data/mysql
    ./bin/mysqld_safe --help

    ./bin/mysqld_safe --user=mysql --default-file=/usr/local/mysql &

    ---再次报错
    /data/mysql/node3.pid ended --- 这个进程 结束了;也就是执行失败了;看看为啥失败

    vi /data/mysql/error.log

    ERROR /usr/local/mysql/bin/mysqld : unknown variable 'default-file=/etc/my.cnf

    --不识别
    --原因:在 ./bin/mysqld_safe 后面必须 紧跟着 --default-file=/usr/local/mysql 否则报不识别

    ---重新启动
    cd /data/mysql
    ./bin/mysqld_safe --help

    ./bin/mysqld_safe --default-file=/usr/local/mysql --user=mysql &

    ---终于启动成功!

    ps -ef|grep mysql

    13.登陆数据库
    mysql


    mysql>

    二、关闭数据库的两种方法
    1.正常关闭
    cd /usr/local/mysql/bin
    mysqladmin shutdown

    ps -ef|grep mysql

    --再次启动数据库

    ./mysqld_safe --defaults-file=/etc/my.cnf &

    --或者绝对路径启动

    /usr/local/mysql/bin/mysqld_safe --defaults-file=/ect/my.cnf &

    ps -ef | grep mysql


    2.非正常关闭数据库

    ps -ef | grep mysql

    kill -9 28576 27949

    ps -ef | grep mysql


    3.修改密码等

    初始化之后会自动生成MySQL数据库,是系统自动创建的

    mysql>show databases;
    Database
    information_schema
    mysql
    performance_schema
    test

    ---创建新的 数据库
    create database dba;

    mysql>show databases;
    Database
    dba
    information_schema
    mysql
    performance_schema
    test

    --mysql 数据库下面的users 表,记录了用户的密码、权限等

    mysql>use mysql;

    mysql>show tables;

    mysql> show tables;
    +---------------------------+
    | Tables_in_mysql |
    +---------------------------+
    | columns_priv |
    | db |
    | user |
    +---------------------------+
    3 rows in set (0.00 sec)

    mysq> select user,host,password from user;

    ---删除其他的,只保留第一行内容


    mysql> select user,host,password from user;
    +------------------+---------------+-----------+
    | user | host | password |
    +------------------+---------------+-----------+
    | root | localhost | |
    | root | rc-bpm-mysql | |
    | root | 127.0.0.1 | |
    | root | ::1 | |
    | | localhost | |
    | | node1 | |
    +------------------+---------------+-----------+
    6 rows in set (0.02 sec)

    mysql> delete from user where user!='root' or host!='localhost';

    mysql>select user,host,password from user;

    ---设置密码
    mysql>update user set password=('root123') where user='root';

    mysql> select user,host,password from user;
    +------------------+---------------+-------------------------------------------+
    | user | host | password |
    +------------------+---------------+-------------------------------------------+
    | root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
    +------------------+---------------+-------------------------------------------+

    --注:现在 root的密码已经是新的了:root123
    切密码设置之后需要刷新才能使密码生效
    flush privileges;

    ---此时再次登陆数据库,不输入密码就会报错

    ---输入密码后可以正常登陆 (修改密码后一定要使用 mysql -uroot -p 这样的方式登陆,这样别人看不见密码!!!)
    mysql> exit
    Bye
    [root@nodel ~]# mysql -uroot -p


    四、root密码管理权限丢失怎么办?(超管权限密码)

    ps -ef|grep mysql

    ---密码丢失之后是无法正常关闭数据库的;只能使用 kill 进程的方式 关闭数据库(非正常形式关闭数据库)

    --注:如果知道密码可以在 mysqladmin shutdown 后面跟 -ppassword

    [root@nodel ~]# mysqladmin shutdown
    mysqladmin: connect to server at 'localhost' failed
    error: 'Access denied for user 'root'@'localhost' (using password: NO)'

    ---此时只能 kill -9 9549

    或者:
    --跳过授权的tables 表 ,也就是跳过了 mysql 库下面的 users 表 启动MySQL

    [root@nodel ~]#/user/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --skip-grant-tables &


    ---当使用 上面的命令 ,跳过 users 表 此时不适应密码就可以登陆数据库
    [root@nodel ~]# mysql

    mysql>

    ---此时在数据库中修改密码,修改完毕后 还是 使用 kill的方式 ,杀掉数据库 杀掉进程 。重新登陆数据库

    mysql>user mysql ;

    mysql>update user set password=password('root123') where user='root';

    mysql> flush privileges;

    mysql>exit;

    ---非正常模式关闭数据库

    ps -ef|grep mysql

    kill -9 ...

    ---使用新密码登陆数据库 密码: root123

    [root@nodel ~]#/user/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &

    [root@nodel ~]# mysql -uroot -p
    Enter password:


    五、MySQL 多实例安装
    1.上传多实例 的 my.cnf 文件 ,并将 单实例 的更名保留 (也可以分成不通的配置文件,一个数据库对应一个,启动按照单实例一个一个启动就可以)

    cd /etc
    mv my.cnf my.cnf_single.cnf

    ll my.*
    my.cnf
    my.cnf_single.cnf

    2.停掉 单实例 数据库

    ps -ef|grep mysql

    kill -9 ....

    3.创建多实例存放目录,并且授权

    cd /data/
    ls
    mysql

    mkdir mysql_3306
    mkdir mysql_3308

    chown -R mysql.mysql:mysql_*

    4.初始化 MySQL 数据库,先 指定 3306 实例

    cd /usr/local/mysql/scripts/
    ./mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql_3306/ --defaults-file=/etc/my.cnf --user=mysql

    ---在指定 3308

    ./mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql_3308/ --defaults-file=/etc/my.cnf --user=mysql

    5.打开 3306 和3308 库
    --注: 开启多实例和单实例 数据库 使用 的 命令是 不一样的
    多实例使用 : ./mysqld_multi start port
    单实例使用 : ./mysqld_safe --defaults-file=/etc/my.cnf &

    cd /usr/local/mysql/bin/
    ./mysqld_multi start 3306
    ./mysqld_multi start 3308
    ./mysqld_multi report

    ps -ef|grep mysql

    6.进入到 3306 和 3308 库
    --注: 进入多实例 使用 套接字 socket的方式 :mysql -S /tmp/mysql_3306.sock

    mysql -S /tmp/mysql_3306.sock
    mysql -S /tmp/mysql_3308.sock

    ---多实例:存在于不想花钱的公司,在一台服务器上安装两套MySQL
    ---这种情况确实很少见,一般是一台安装一个MySQL

    六、MySQL多实例改回单实例

    1.停掉多实例数据库
    cd /usr/local/mysql/bin
    ./mysqld_multi stop 3306
    ./mysqld_multi stop 3308
    ./mysqld_multi report

    ps -ef|grep mysql

    2.修改配置为 单实例的配置文件

    cd /etc

    mv my.cnf my_multi.cnf

    mv my.cnf_single my.cnf

    3.启动单实例数据库
    --单实例启动命令
    ./mysqld_safe --defaults-file=/etc/my.cnf &

    4.进入数据库
    mysql -uroot -p

    mysql>

    七、远程连接MySQL数据库

    --注:root 用户 只是本地用户,不用用它作为远程用户
    --一般情况使用的都是 TCPIP 方式 远程连接数据库

    1.在数据库创建用户并授予远程连接权限
    mysql>grant all privileges on *.* to 'ss'@'192.168.1.%' identified by '123456';


    -- 第一个 * 代表库,'.' 这个代表 这个数据库下的所有表 ,最后一个是 通配符

    flush privileges;


    2.另一台服务器远程连接 MySQL数据库

    --注: 另一台服务器也需要安装 MySQL ,因为是将其当作 客户端来使用 进行远程连接

    [root@node2 ~]#mysql -uss -p123456 -h192.168.1.1


    八、修改默认端口号3306为其他端口号

    --注:在生产中端口号不用使用默认的3306端口,尽可能的改成别的

    1.更改端口号,修改配置文件就行

    vi /ect/my.cnf

    :%s /3306/3308/g

    --保存退出

    2.关闭数据库

    ps -ef|grep mysql

    kill -9 ...

    3.重启启动数据库

    cd /usr/local/mysql/bin/
    ./mysqld_safe --defaults-file=/etc/my.cnf &

    4.再次使用另一台服务器远程连接 此数据库;此时报错:提示无法连接,原因是 端口号被更改,需要手动指定

    mysql -uss -p123456 -h192.168.1.1 -P 3308

    5.修改成默认端口

    vi /etc/my.cnf

    :%s/3308/3306/g

    --保存退出

    ---kill 数据库,重新启动

    ps -ef|grep mysql

    kill -9 ...

    重启启动数据库

    cd /usr/local/mysql/bin/
    ./mysqld_safe --defaults-file=/etc/my.cnf &

    --再次尝试远程连接,不再需要指定端口号


    [root@node2 ~]#mysql -uss -p123456 -h192.168.1.1

    mysql>


    ----注意:也可以使用 套接字 mysql.sock 这种方式登陆数据库,但是只能用在本地,是和root配合使用

    ps -ef|grep mysql --找到 socket

    mysql -uroot -p1234 -S /tmp/mysql.sock

    ---root 用户 对应 的host 就是 localhost ,其他用户对应的host 可以是 IP 地址,也可以是一个网段,但千万不能是 %

    --注:一般针对 的权限 控制在 OA 系统 比较常见。比如说 只能看见 考勤记录,但是不能看见 薪资情况

    ---SQL 注入脚本 :无限循环

    select * from t;
    sleep(100000000);

  • 相关阅读:
    WF编译报错
    VS2012编译错误信息,错误列表却没显示
    SQL Server带游标的SQL
    SQL Server创建LinkServer
    ASP.NET自定义控件加载资源WebResource问题
    sqlserver 增加用户并分配权限
    Java for C#程序员
    laravel安装
    Convert Geometry data into a Geography data in MS SQL Server
    linux安装ruby
  • 原文地址:https://www.cnblogs.com/ss-33/p/11227467.html
Copyright © 2011-2022 走看看