• 三、 MySQL版本区别及管理


    一.MySQL5.6与MySQL5.7安装的区别

    • 1、cmake的时候加入了bostorg
    • 2、初始化时 使用mysqld --initialize 替代mysql_install_db,其它参数没有变化:--user= --basedir= --datadir=
    • 3、--initialize会生成一个临时密码
    • 4、还可以用另外一个参数--initialize-insecure
    [root@db02 mysql-5.7.20]# yum install -y gcc gcc-c++ automake autoconf
    [root@db02 mysql-5.7.20]# yum install make cmake bison-devel ncurses-devel libaio-devel
    [root@db02 mysql-5.7.20]#
    wget httpss://dl.bintray.com/boostorg/release/1.65.1/source/boost_1_59_0.tar.gz
    #登录boost.org下载也可以
    [root@db02 mysql-5.7.20]# tar xf boost_1_59_0.tar.gz -C /usr/local/
    [root@db02 mysql-5.7.20]#
    cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.7.20 
    -DMYSQL_DATADIR=/application/mysql-5.7.20/data 
    -DMYSQL_UNIX_ADDR=/application/mysql-5.7.20/tmp/mysql.sock 
    -DDOWNLOAD_BOOST=1 
    -DWITH_BOOST=/usr/local/boost_1_59_0 
    -DDEFAULT_CHARSET=utf8 
    -DDEFAULT_COLLATION=utf8_general_ci 
    -DWITH_EXTRA_CHARSETS=all 
    -DWITH_INNOBASE_STORAGE_ENGINE=1 
    -DWITH_FEDERATED_STORAGE_ENGINE=1 
    -DWITH_BLACKHOLE_STORAGE_ENGINE=1 
    -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 
    -DWITH_ZLIB=bundled 
    -DWITH_SSL=bundled 
    -DENABLED_LOCAL_INFILE=1 
    -DWITH_EMBEDDED_SERVER=1 
    -DENABLE_DOWNLOADS=1 
    -DWITH_DEBUG=0 
    

    二.MySQL用户权限管理

    • 1.MySQL用户基础操作

    Linux用户的作用:

    • 1)登陆系统
    • 2)管理系统文件

    Linux用户管理:

    • 1)创建用户:useradd adduser
    • 2)删除用户:userdel
    • 3)修改用户:usermod

    MySQL用户的作用:

    • 1)登陆MySQL数据库
    • 2)管理数据库对象

    MySQL用户管理:

    • 1)创建用户:create user、grant
    • 2)删除用户:delete user drop user
    • 3)修改用户:update、alter、grant
    #创建用户
    create user zls@'%';
    #创建用户同时给密码(5.7)如果用户不存在没法使用grant
    create user qls@'%' identified by '123';
    grant all on *.* to qls@'%';
    
    #删除用户
    mysql> drop user root@'db02';
    Query OK, 0 rows affected (0.00 sec)
    mysql> drop user ''@'db02';
    Query OK, 0 rows affected (0.00 sec)
    
    #修改用户
    mysql> update mysql.user set password=PASSWORD('123') where user='root' and
    host='localhost';
    

    用户的定义:

      1. username@'主机域'

      root@'%' select

      root@'localhost' 超级用户

      root@'127.0.0.1' 超级用户

      root@'10.0.0.%'

      root@'10.%.%.%'

      root@'10.0.0.0/255.255.255.0'

      root@'db01'

      mysql> select user,host from mysql.user;
      +------+------------------------+
      | user | host					|
      +------+------------------------+
      | root | % 						|
      | root | 10.0.0.0/24 			|#不能用
      | root | 10.0.0.0/255.255.255.0 |#能用
      | root | 127.0.0.1 				|
      | root | localhost 				|
      +------+------------------------+
      
    • 2)主机域:可以理解为是MySQL登陆的白名单

    • 3)主机域格式:

      • ’10.0.0.51’
      • ’10.0.0.5%’
      • ’10.0.0.%’
      • ’10.0.%.%’
      • ’10.%.%.%’
      • ‘%’
      • ‘db01’
      • ’10.0.0.51/255.255.255.0’

    用户管理实战

    刚装完MySQL数据库该做的事情

    • 1、设定初始密码(root@localhost)
    [root@db02 mysql-5.7.20]# mysqladmin -uroot -p password ‘oldboy123’
    
    #创建用户
    create user zls@'%';
    #查看用户
    select user,host from mysql.user;
    #创建用户同时给密码
    create user qls@'%' identified by '123';
    grant all on *.* to qls@'%';
    #删除用户
    drop user zls@'%';
    drop user ''@'db02';
    #查看位置
    select database();
    #修改用户密码
    update mysql.user set password=PASSWORD('123') where user='root' ' and host='localhost';
    #
    flush privileges;
    
    • 2、修改密码
    • 3、使用密码登陆
    [root@db02 mysql-5.7.20]# mysql -uroot -p123
    
    • 4、清理无用的用户

    误删除了所有用户

    #关闭数据库
    [root@db02 mysql-5.7.20]# /etc/init.d/mysqld stop
    #启动数据库
    [root@db02 mysql-5.7.20]# mysqld_safe --skip-grant-tables --skip-networking
    #使用mysql库
    mysql> use mysql
    #错误方法1、创建root用户
    mysql> create user root@’localhost’;
    #错误方法2、创建root用户
    mysql> insert into user(user,host,password) values('root','10.0.0.55',PASSWORD('123'));
    #正确方法创建root用户
    mysql> insert into mysql.user values ('localhost','root',PASSWORD('123'),
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    'Y',
    '',
    '',
    '',
    '',0,0,0,0,'mysql_native_password','','N');
    

    误删除root用户

    [root@db01 bin]# mysqld_safe --skip-grant_tables &
    --skip-grant_tables #跳过授权表
    [root@db01 bin]# mysqld_safe --skip-grant-tables --skip-networking &
    --skip-networking # 跳过网络(安全)
    mysql> insert into user(user,host,password) values('root','localhost',PASSWORD('123'));
    mysql> insert into user(user,host,password,ssl_cipher,x509_issuer,x509_subject)
    values('root','localhost',PASSWORD('123'),'null','null','null');
    

    忘记root密码

    #关闭数据库
    [root@db02 mysql-5.7.20]# /etc/init.d/mysqld stop
    #启动数据库
    [root@db02 mysql-5.7.20]# mysqld_safe --skip-grant-tables --skip-networking
    #修改root用户密码
    mysql> update user set password=PASSWORD('oldboy123') where user='root' and host='localhost';
    
    #先停止数据库
    mysqld_safe --skip-grant-tables --skip-networking &
    #1.update修改密码
    update mysql.user set password=PASSWORD('123') where user='root' and host='localhost';
    mysql> flush privileges;
    #2.set
    mysql> set password=PASSWORD('1');
    #3.grant
    mysql> grant all on *.* to root@'localhost' identified by '2';
    #4.mysqladmin
    [root@db01 ~]# mysqladmin -uroot -p2 password '123'
    #5.alter
    
    • 2.用户管理及权限管理

    1)创建用户

    mysql> create user oldboy@'10.0.0.%' identified by '123';
    

    2)查看用户

    mysql>  select user,host from mysql.user;
    

    3)删除用户

    mysql>  drop user oldboy@‘10.0.0.%’;
    

    4)修改密码

    mysql> set password
    mysql> update user set password=PASSWORD('oldboy123') where user='root' and host='localhost';
    mysql> grant all privileges on *.* to oldboy@’10.0.0.%’ identified by ‘123’;
    

    5)用户权限介绍

    MySQL的权限定义:
    作用对象:库、表
    权限

    INSERT,SELECT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN,  PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE
    

    给开发开权限

    grant INSERT,SELECT, UPDATE, DELETE on *.* to dev@'xxx';
    

    权限最小化,最小级别不是表级别,是列级别

    grant select on mysql.user to dev@'10.0.0.5%' identified by '123';
    主机域:10.0.0.5% 可以连接:10.0.0.50-59 10.0.0.5
    

    脱敏:脱离敏感信息

    grant select(user,host) on wzry.user to no_vip@'%' identified by '123';
    数据库集群,10.0.0.51 52 53 54 
    

    归属
    每次设定只能有一个属主,没有属组或其他用户的概念

    grant     all privileges    on     *.*    to   oldboy@’10.0.0.%’  identified by    ‘123’;
                    权限               作用对象          归属               密码
    

    作用对象分解

    *.* [当前MySQL实例中所有库下的所有表]
    wordpress.* [当前MySQL实例中wordpress库中所有表(单库级别)]
    wordpress.user [当前MySQL实例中wordpress库中的user表(单表级别)]

    单列级别,是最小级别

    3.企业中权限的设定

    开发人员说:请给我开一个用户
    沟通:

    • 1、你需要对哪些库、表进行操作 insert,delete,update,wordpress.*
    • 2、你从哪里连接过来 ’10.0.0.5%’
    • 3、用户名有没有要求
    • 4、密码要求
    • 5、发邮件,走流程
    #一般给开发创建用户权限
    grant select,update,delete,insert on *.* to oldboy@’10.0.0.%’ identified by ‘123’;
    

    思考下面场景:
    开发:你把root用户给我呗?

    你:emmmmm........ SO?


    实验思考问题:

    #创建wordpress数据库
    create database wordpress;
    #使用wordpress库
    use wordpress;
    #创建t1、t2表
    create table t1 (id int);
    create table t2 (id int);
    #创建blog库
    create database blog;
    #使用blog库
    use blog;
    #创建t1表
    create table tb1 (id int);
    

    授权:

    1、grant select on *.* to wordpress@’10.0.0.5%’ identified by ‘123’;
    	#针对wordpress@'10.0.0.5%' 授权 所有库所有表 查询权限 密码是 123
    2、grant insert,delete,update on wordpress.* to wordpress@’10.0.0.5%’ identified by ‘123’;
    	#针对wordpress@'10.0.0.5%' 授权 插入、删除、修改 wordpress库中的所有表 密码是 123
    3、grant all on wordpress.t1 to wordpress@’10.0.0.5%’ identified by ‘123’;
    	#针对wordpress@'10.0.0.5%' 授权所有权限 wordpress库中的t1表 密码是123
    

    问:
    一个客户端程序使用wordpress用户登陆到10.0.0.51的MySQL后,

    [root@db02 ~]# mysql -uwordpress -p123 -h10.0.0.51
    
    • 1、对t1表的管理能力?
      • select , insert, delete, update, all
    • 2、对t2表的管理能力?
      • select,insert, delete, update
    • 3、对tb1表的管理能力?
      • 只有select

    解:

    • 1、同时满足1,2,3,最终权限是1+2+3
    • 2、同时满足了1和2两个授权,最终权限是1+2
    • 3、只满足1授权,所以只能select

    结论:

    • 1、如果在不同级别都包含某个表的管理能力时,权限是相加关系。
    • 2、但是我们不推荐在多级别定义重复权限。
    • 3、最常用的权限设定方式是单库级别授权,即:wordpress.* 【单库级别】

    三.MySQL连接管理

    1.连接工具

    • 1)MySQL自带的连接工具

    mysql

    常见的特定于客户机的连接选项:
    -u:指定用户
    -p:指定密码
    -h:指定主机
    -P:指定端口
    -S:指定sock
    -e:指定SQL
    --protocol=name:指定连接方式

    • 2)第三方的连接工具

    sqlyog、navicat
    应用程序连接MySQL
    注意:需要加载对应语言程序的API

    2.连接方式

      1. socket连接
    mysql -uroot -poldboy123 -S/application/mysql/tmp/mysql.sock
    mysql -uroot -poldboy123
    
      1. TCP/IP
    mysql -uroot -poldboy123 -h10.0.0.51 -P3306
    
    • 问题:你怎么判断你的MySQL数据库可以对外提供服务?

    四.MySQL启动关闭流程

    启动

    /etc/init.d/mysqld start ------> mysqld_safe ------> mysqld
    service mysqld start
    systemctl start mysqld
    mysqld_safe --defaults-file=/etc/my.cnf &
    

    关闭

    /etc/init.d/mysqld stop 
    service mysqld stop
    systemctl stop mysqld
    mysqladmin -uroot -poldboy123 shutdown
    kill -9 pid ?
    killall mysqld ?
    pkill mysqld ?
    

    出现问题:
    - 1、如果在业务繁忙的情况下,数据库不会释放pid和sock文件
    - 2、号称可以达到和Oracle一样的安全性,但是并不能100%达到
    - 3、在业务繁忙的情况下,丢数据(补救措施,高可用)

    可通过如下地址查看,生产高并发环境野蛮粗鲁杀死数据库进程导致故障企业案例:
    625某电商网站数据库宕机故障解决实录(上)
    625某电商网站数据库宕机故障解决实录(下)

    五.MySQL实例初始化配置

    1.初始化配置文件的作用

    场景:我要启动实例

    问题:
    1)我不知道我的程序在哪?
    2)我也不知道我将来启动后去哪找数据库?
    3)将来我启动的时候启动信息和错误信息放在哪?
    4)我启动的时候sock文件pid文件放在哪?
    5)我启动,你们给了我多少内存?
    ...
    N)我还有很多问题需要在我启动之前告诉我,emmmmm....

    • 1)预编译:cmake去指定,硬编码到程序当中去
    • 2)在命令行设定启动初始化配置
    --skip-grant-tables 
    --skip-networking
    --datadir=/application/mysql/data
    --basedir=/application/mysql
    --defaults-file=/etc/my,cnf
    --pid-file=/application/mysql/data/db01.pid
    --socket=/application/mysql/data/mysql.sock
    --user=mysql
    --port=3306
    --log-error=/application/mysql/data/db01.err
    
    • 3)初始化配置文件(/etc/my.cnf)

    配置文件读取顺序:

    /etc/my.cnf
    /etc/mysql/my.cnf
    $MYSQL_HOME/my.cnf(前提是在环境变量中定义了MYSQL_HOME变量)
    defaults-extra-file (类似include)
    ~/my.cnf

    /etc/my.cnf 				server_id=1
    /etc/mysql/my.cnf	 		server_id=2
    /application/mysql/my.cnf 	server_id=3
    ~/.my.cnf 					server_id=4
    
    [root@db02 ~]# mysql -uroot -p123 -e "show variables like 'server_id'"
    Warning: Using a password on the command line interface can be insecure.
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | server_id 	| 4 	|
    +---------------+-------+
    

    --defaults-file:默认配置文件
    如果使用./bin/mysqld_safe 守护进程启动mysql数据库时,使用了 --defaults-file=<配置文件的绝对路径>参数,这时只会使用这个参数指定的配置文件。


    思考:

    #cmake:
    socket=/application/mysql/tmp/mysql.sock
    
    #命令行:
    --socket=/tmp/mysql.sock
    
    #配置文件:
    /etc/my.cnf中[mysqld]标签下:socket=/opt/mysql.sock
    
    #default参数:
    --defaults-file=/tmp/a.txt配置文件中[mysqld]标签下:socket=/tmp/test.sock
    

    socket文件会生成在哪???文件名叫什么???

    优先级结论:

    • 1、命令行优先级最高
    • 2、defaults-file
    • 3、配置文件读取顺序反着来
    • 4、预编译cmake优先级最低

    2.初始化配置文件的使用

    初始化配置文件功能

    1)影响实例的启动(mysqld)
    2)影响到客户端

    • mysql
    • mysqldump
    • mysqladmin

    如何配置初始化配置文件

    1)配置标签分类
    [client]所有客户端程序
    mysql
    mysqldump
    ...

    [server]所有服务器程序
    mysqld
    mysqld_safe
    ...

    六.MySQL多实例配置

    • 1.什么是多实例

    1)多套后台进程+线程+内存结构

    2)多个配置文件

    ​ a.多个端口

    ​ b.多个socket文件

    ​ c.多个日志文件

    ​ d.多个server_id

    ​ e.启动脚本

    3)多套数据

    • 2.多实例实战
    #创建数据目录
    [root@db01 ~]# mkdir -p /data/330{7..9}
    #创建配置文件
    [root@db01 ~]# touch /data/330{7..9}/my.cnf
    #编辑3307配置文件
    [root@db01 ~]# vim /data/3307/my.cnf
    [mysqld]
    basedir=/application/mysql
    datadir=/data/3307/data
    socket=/data/3307/mysql.sock
    log_error=/data/3307/mysql.log
    log-bin=/data/3307/mysql-bin
    server_id=7
    port=3307
    [client]
    socket=/data/3307/mysql.sock
    #编辑3308配置文件
    [root@db01 ~]# vim /data/3308/my.cnf
    [mysqld]
    basedir=/application/mysql
    datadir=/data/3308/data
    socket=/data/3308/mysql.sock
    log_error=/data/3308/mysql.log
    log-bin=/data/3308/mysql-bin
    server_id=8
    port=3308
    [client]
    socket=/data/3308/mysql.sock
    #编辑3309配置文件
    [root@db01 ~]# vim /data/3309/my.cnf
    [mysqld]
    basedir=/application/mysql
    datadir=/data/3309/data
    socket=/data/3309/mysql.sock
    log_error=/data/3309/mysql.log
    log-bin=/data/3309/mysql-bin
    server_id=9
    port=3309
    [client]
    socket=/data/3309/mysql.sock
    #初始化3307数据
    [root@db01 ~]#/application/mysql/scripts/mysql_install_db 
    --user=mysql 
    --defaults-file=/data/3307/my.cnf 
    --basedir=/application/mysql --datadir=/data/3307/data
    #初始化3308数据
    [root@db01 ~]#/application/mysql/scripts/mysql_install_db 
    --user=mysql 
    --defaults-file=/data/3308/my.cnf 
    --basedir=/application/mysql --datadir=/data/3308/data
    #初始化3309数据
    [root@db01 ~]#/application/mysql/scripts/mysql_install_db 
    --user=mysql 
    --defaults-file=/data/3309/my.cnf 
    --basedir=/application/mysql --datadir=/data/3309/data
    #修改目录权限
    [root@db01]# chown -R mysql.mysql /data/330*
    #启动多实例
    [root@db01]# mysqld_safe --defaults-file=/data/3307/my.cnf &
    [root@db01]# mysqld_safe --defaults-file=/data/3308/my.cnf &
    [root@db01]# mysqld_safe --defaults-file=/data/3309/my.cnf &
    #查看server_id
    [root@db01]# mysql -S /data/3307/mysql.sock -e "show variables like 'server_id'"
    [root@db01]# mysql -S /data/3308/mysql.sock -e "show variables like 'server_id'"
    [root@db01]# mysql -S /data/3309/mysql.sock -e "show variables like 'server_id'"
    

    1.准备多个配置文件

    #创建多个存放配置文件的目录
    [root@db02 ~]# mkdir /data/{3307,3308,3309} -p
    [root@db02 ~]# tree /data/
    /data/
    ├── 3307
    ├── 3308
    └── 3309
    
    #创建多个配置文件
    [root@db02 ~]# vim /data/3307/my.cnf
    [mysqld]
    basedir=/application/mysql
    datadir=/data/3307/data
    socket=/data/3307/data/mysql.sock
    port=3307
    log_error=/data/3307/data/3307.err
    server_id=7
    pid_file=/data/3307/data/3307.pid
    -------------------------------------------------------------------------
    
    [root@db02 ~]# vim /data/3308/my.cnf
    [mysqld]
    basedir=/application/mysql
    datadir=/data/3308/data
    socket=/data/3308/data/mysql.sock
    port=3308
    log_error=/data/3308/data/3308.err
    server_id=8
    pid_file=/data/3308/data/3308.pid
    -------------------------------------------------------------------------
    
    [root@db02 ~]# vim /data/3309/my.cnf
    [mysqld]
    basedir=/application/mysql
    datadir=/data/3309/data
    socket=/data/3309/data/mysql.sock
    port=3309
    log_error=/data/3309/data/3309.err
    server_id=9
    pid_file=/data/3309/data/3309.pid
    -------------------------------------------------------------------------
    
    [root@db02 ~]# tree /data
    /data
    ├── 3307
    │ └── my.cnf
    ├── 3308
    │ └── my.cnf
    └── 3309
      └── my.cnf
    

    2.初始化多个datadir

    [root@db02 ~]# cd /application/mysql/scripts/
    
    #初始化3307的数据目录
    [root@db02 scripts]# ./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --
    basedir=/application/mysql --datadir=/data/3307/data
    
    #3308
    [root@db02 scripts]# ./mysql_install_db --defaults-file=/data/3308/my.cnf --user=mysql --
    basedir=/application/mysql --datadir=/data/3308/data
    
    #3309
    [root@db02 scripts]# ./mysql_install_db --defaults-file=/data/3309/my.cnf --user=mysql --
    basedir=/application/mysql --datadir=/data/3309/data
    
    [root@db02 scripts]# tree -L 2 /data
    /data
    ├── 3307
    │ ├── data
    │ └── my.cnf
    ├── 3308
    │ ├── data
    │ └── my.cnf
    └── 3309
      ├── data
      └── my.cnf
    

    3.启动多实例

    [root@db02 ~]# mysqld_safe --defaults-file=/data/3307/my.cnf &
    [root@db02 ~]# mysqld_safe --defaults-file=/data/3308/my.cnf &
    [root@db02 ~]# mysqld_safe --defaults-file=/data/3309/my.cnf &
    
    #查看server_id
    [root@db02 ~]# mysql -uroot -p3307 -S /data/3307/data/mysql.sock -e "show variables like 'server_id'"
    [root@db02 ~]# mysql -uroot -p3308 -S /data/3308/data/mysql.sock -e "show variables like 'server_id'"
    [root@db02 ~]# mysql -uroot -p3309 -S /data/3309/data/mysql.sock -e "show variables like 'server_id'"
    
    #检查端口
    [root@db02 scripts]# netstat -lntup
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program
    name
    tcp6 0 0 :::3306 :::* LISTEN
    13052/mysqld
    tcp6 0 0 :::3307 :::* LISTEN
    13598/mysqld
    tcp6 0 0 :::3308 :::* LISTEN
    13428/mysqld
    tcp6 0 0 :::3309 :::* LISTEN
    13768/mysqld
    

    4.设置密码

    [root@db02 scripts]# mysqladmin -uroot -p -S/data/3307/data/mysql.sock password '3307'
    [root@db02 scripts]# mysqladmin -uroot -p -S/data/3308/data/mysql.sock password '3308'
    [root@db02 scripts]# mysqladmin -uroot -p -S/data/3309/data/mysql.sock password '3309'
    

    5.连接MySQL

    [root@db02 scripts]# mysql -uroot -p3307 -S /data/3307/data/mysql.sock
    [root@db02 scripts]# mysql -uroot -p3308 -S /data/3308/data/mysql.sock
    [root@db02 scripts]# mysql -uroot -p3309 -S /data/3309/data/mysql.sock
    
    #小技巧
    [root@db02 scripts]# cd cd /usr/local/bin/
    [root@db02 bin]# vim mysql3309
    mysql -uroot -p3309 -S /data/3309/data/mysql.sock
    
    [root@db02 bin]# chmod +x mysql3309
    

    练习:

    1.在其他机器上开多实例,3台,3306, 13306 23306 33306

    2.做主从复制,3306是主,1 2 3 都是从

    #创建多个存放配置文件的目录
    [root@db01 ~]# mkdir /data/{13306,23306,33306} -p
    
    #创建多个配置文件
    [root@db01 ~]# vim /data/13306/my.cnf
    [mysqld]
    basedir=/application/mysql
    datadir=/data/13306/data
    socket=/data/13306/data/mysql.sock
    port=13306
    log_error=/data/13306/data/mysql.err
    log-bin=/data/13306/data/mysql-bin
    server_id=13
    pid_file=/data/13306/data/13306.pid
    
    [client]
    socket=/data/13306/data/mysql.sock
    
    --------------------------------------------------------
    [root@db01 ~]# vim /data/23306/my.cnf
    [mysqld]
    basedir=/application/mysql
    datadir=/data/23306/data
    socket=/data/23306/data/mysql.sock
    port=23306
    log_error=/data/23306/data/mysql.err
    log-bin=/data/23306/data/mysql-bin
    server_id=23
    pid_file=/data/23306/data/23306.pid
    
    [client]
    socket=/data/23306/data/mysql.sock
    
    --------------------------------------------------------
    [root@db01 ~]# vim /data/33306/my.cnf
    [mysqld]
    basedir=/application/mysql
    datadir=/data/33306/data
    socket=/data/33306/data/mysql.sock
    port=33306
    log_error=/data/33306/data/mysql.err
    log-bin=/data/33306/data/mysql-bin
    server_id=33
    pid_file=/data/33306/data/33306.pid
    
    [client]
    socket=/data/33306/data/mysql.sock
    
    --------------------------------------------------------
    #修改目录权限
    [root@db01 ~]# chown mysql.mysql /data/ -R
    [root@db01 ~]# cd /application/mysql/scripts/
    #初始化13306的数据目录
    [root@db01 scripts]# ./mysql_install_db --defaults-file=/data/13306/my.cnf --user=mysql --basedir=/application/mysql --datadir=/data/13306/data
    
    #初始化23306的数据目录
    [root@db01 scripts]# ./mysql_install_db --defaults-file=/data/23306/my.cnf --user=mysql --basedir=/application/mysql --datadir=/data/23306/data
    
    #初始化33306的数据目录
    [root@db01 scripts]# ./mysql_install_db --defaults-file=/data/33306/my.cnf --user=mysql --basedir=/application/mysql --datadir=/data/33306/data
    
    [root@db01 scripts]# tree -L 2 /data
    /data
    ├── 13306
    │   ├── data
    │   └── my.cnf
    ├── 23306
    │   ├── data
    │   └── my.cnf
    └── 33306
        ├── data
        └── my.cnf
    
    #启动多实例
    [root@db01 scripts]# mysqld_safe --defaults-file=/data/13306/my.cnf &
    [root@db01 scripts]# mysqld_safe --defaults-file=/data/23306/my.cnf &
    [root@db01 scripts]# mysqld_safe --defaults-file=/data/33306/my.cnf &
    
    #查看server_id
    [root@db01 bin]# mysql -uroot -p13306 -S /data/13306/data/mysql.sock -e "show variables like 'server_id'"
    Warning: Using a password on the command line interface can be insecure.
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | server_id     | 13    |
    +---------------+-------+
    
    [root@db01 bin]# mysql -uroot -p23306 -S /data/23306/data/mysql.sock -e "show variables like 'server_id'"
    Warning: Using a password on the command line interface can be insecure.
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | server_id     | 23    |
    +---------------+-------+
    
    [root@db01 bin]# mysql -uroot -p33306 -S /data/33306/data/mysql.sock -e "show variables like 'server_id'"
    Warning: Using a password on the command line interface can be insecure.
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | server_id     | 33    |
    +---------------+-------+
    
    #检查端口
    [root@db01 scripts]# netstat -lntup
    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      6772/sshd         
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      6903/master       
    tcp6       0      0 :::23306                :::*                    LISTEN      42534/mysqld      
    tcp6       0      0 :::3306                 :::*                    LISTEN      40977/mysqld      
    tcp6       0      0 :::22                   :::*                    LISTEN      6772/sshd         
    tcp6       0      0 ::1:25                  :::*                    LISTEN      6903/master       
    tcp6       0      0 :::33306                :::*                    LISTEN      42860/mysqld      
    tcp6       0      0 :::13306                :::*                    LISTEN      42208/mysqld     
    
    #设置密码
    [root@db01 scripts]# mysqladmin -uroot -p -S/data/13306/data/mysql.sock password '13306'
    [root@db01 scripts]# mysqladmin -uroot -p -S/data/23306/data/mysql.sock password '23306'
    [root@db01 scripts]# mysqladmin -uroot -p -S/data/33306/data/mysql.sock password '33306'
    
    #连接MySQL
    [root@db01 scripts]# mysql -uroot -p13306 -S /data/13306/data/mysql.sock
    [root@db01 scripts]# mysql -uroot -p23306 -S /data/23306/data/mysql.sock
    [root@db01 scripts]# mysql -uroot -p33306 -S /data/33306/data/mysql.sock
    
    #小技巧
    [root@db02 scripts]# cd /usr/local/bin/
    [root@db01 bin]# vim /usr/local/bin/mysql13306
    mysql -uroot -p13306 -S /data/13306/data/mysql.sock
    
    [root@db01 bin]# vim /usr/local/bin/mysql23306
    mysql -uroot -p23306 -S /data/23306/data/mysql.sock
    
    [root@db01 bin]# vim /usr/local/bin/mysql33306
    mysql -uroot -p33306 -S /data/33306/data/mysql.sock
    
    #加上执行权限
    [root@db01 bin]# chmod +x /usr/local/bin/mysql13306
    [root@db01 bin]# chmod +x /usr/local/bin/mysql23306
    [root@db01 bin]# chmod +x /usr/local/bin/mysql33306
    
    #登录
    [root@db01 bin]# mysql13306
    [root@db01 bin]# mysql23306
    [root@db01 bin]# mysql33306
    
    #编辑配置文件,主库server-id,主库binlog及位置点
    [root@db01 ~]# vim /etc/my.cnf
    log_bin = /application/mysql/data/mysql-bin
    server_id = 1
    
    #重启mysql
    [root@db01 etc]# systemctl restart mysqld
    
    #记录主库binlog及位置点
    [root@db01 etc]# mysql -uroot -p123
    mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000001 |      120 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    
    #创建主从用户
    mysql> grant replication slave on *.* to slave@'%' identified by '123';
    Query OK, 0 rows affected (0.01 sec)
    
    #从库执行change master to 语句
    [root@db01 ~]# mysql13306
    mysql> change master to
    master_host='10.0.0.51',
    master_user='slave',
    master_password='123',
    master_log_file='mysql-bin.000001',
    master_log_pos=120,
    master_port=3306;
    Query OK, 0 rows affected, 2 warnings (0.02 sec)
    
    #开启线程
    mysql> start slave;
    Query OK, 0 rows affected (0.02 sec)
    
    #查看主从
    mysql> show slave statusG
    
  • 相关阅读:
    方法 —— 参数传递、重载、命令行参数与可变参数
    Float型 与 Double型数据的存储方式
    交换两个变量的值
    【LeetCode-数组】螺旋矩阵(顺时针打印矩阵)
    【LeetCode-链表】二叉树展开为链表
    【LeetCode-动态规划】零钱兑换 II
    【LeetCode-树】将有序数组转换为二叉搜索树
    【LeetCode-树】从上到下打印二叉树 III
    【LeetCode-链表】相交链表
    【LeetCode-字符串】字符串转换整数 (atoi)
  • 原文地址:https://www.cnblogs.com/chenmiao531759321/p/11808616.html
Copyright © 2020-2023  润新知