mysql 数据库的主从复制及备份、恢复

##远程登录MySql

mysql -h62.234.124.229 -P31306 -ucrab -p123456

mysql --host=62.234.124.229 --user=yq --password=123456

##给远程登录的用户授权:
grant all on *.* to [email protected]‘114.248.166.196‘ identified by ‘123456‘;
grant select,update,delete on *.* to [email protected]‘114.248.166.196‘ identified by ‘123456‘;

[email protected]‘114.248.166.196‘:权限一定是用户名+ip地址;
[email protected]‘114.248.166.%‘
[email protected]‘114.248.%‘
[email protected]‘%‘   表示全部地址均可访问;

##测试远程连接是否可用
telnet ip 数据库端口   --3306 是mysql的默认端口,如果连接数据库时不指定端口,默认尝试去连3306 

##客户端mysql命令的参数:mysql --help

-h :host
-u : user
-p : password
-e, --execute=name  Execute command and quit. (Disables --force and history
-f, --force         Continue even if we get an SQL error. Sets
                      abort-source-on-error to 0
                      file.)
-P, --port=#        Port number to use for connection or 0 for default to, in
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
                      /etc/services, built-in default (3306).
-s, --silent        Be more silent. Print results with a tab as separator,
                      each row on new line.

-E, --vertical      Print the output of a query (rows) vertically.
-D, --database=name Database to use.

##远程执行 指令:
    mysql --host=62.234.124.229 --user=yq --password=123456 --execute="show grants"
    mysql -h62.234.124.229 -uyq -p123456 -e"show grants"
    mysql -h62.234.124.229 -ucrab -p123456 -e "select * from city order by Population desc limit 10;"

## mysqladmin指令:
    flush-hosts:刷新客户端错误连接的缓存
    processlist与登录mysql后命令行执行 show processlist;一样的
    mysqladmin -c5 -i2 -h 62.234.124.229 -ucrab -p123456 processlist
    mysqladmin -c5 -i2 -h 62.234.124.229 -ucrab -p123456 status
-c:是一共执行多少次
-i:是间隔几秒,

##查看客户端连接ID:select connection_ID();

##binlog与mysqlbinlog命令
    binlog是mysql的二进制日志,记录mysql中所有的数据和结构**变化**

    1.打开二进制日志,参数 log_bin,在my.cnf里添加该参数

    show global variables like "log_bin"  

    | log_bin                                 | ON                                      |
    | log_bin_basename                        | /var/lib/mysql/VM_0_15_centos-bin       |
    | log_bin_index                           | /var/lib/mysql/VM_0_15_centos-bin.index |

    VM_0_15_centos-bin.index,以index结尾的文件存放的是当前binlog列表名

    mysqlbinlog 是用来打开读取二进制日志的
    mysqlbinlog VM_0_15_centos-bin.index

    show global variables like "%log_bin%"

##mysql命令行,远程查看binlog日志:
    show binary logs;
    show binlog events in "VM_0_15_centos-bin.000003"

##临时整理:
    mysqlbinlog --start-position=471 --stop-position=875 --database=ops /var/lib/mysql/mysql-bin.000003
    从binlog日志恢复数据
    恢复命令的语法格式:
    mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名

    常用参数选项解释:
    -–start-position=875 起始pos点
    -–stop-position=954 结束pos点
    -–start-datetime="2019-12-23 18:00:00" 起始时间点
    -–stop-datetime="2019-12-23 19:00:00" 结束时间点
    -–database=zyyshop 指定只恢复zyyshop数据库(一台主机上往往有多个数据库,只限本地log日志)

    不常用选项:
    -u --user=name 连接到远程主机的用户名
    -p --password[=name] 连接到远程主机的密码
    -h --host=name 从远程主机上获取binlog日志
    –read-from-remote-server 从某个MySQL服务器上读取binlog日志
mysqlbinlog -h18.6.3.72 -P31306 -ulps -p0000abc! -–start-datetime="2019-12-23 18:00:00" -–stop-datetime="2019-12-23 19:00:00" --database=g3_lps_core_00 /data/binlog/bin.000520

mysql -h18.6.3.72 -P31306 -ulps -p0000abc! --start-datetime="2019-12-23 18:00:00"

##MySQL的备份恢复
    逻辑备份:按照mysql的逻辑进行备份,备份出来的是可执行的sql语句
    常用命令,mysqldump(mysql自带的),mydumper(开源工具)
    基于语句级别的:select ... into outfile ‘xxx‘
    mysqldump 可本机执行,也可远程执行
    mysqldump
    Usage: mysqldump [OPTIONS] database [tables]
    OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
    OR     mysqldump [OPTIONS] --all-databases [OPTIONS]

    #备份所有库:
    mysqldump -uroot -p123456 --all-databases >all_dump.sql
    1.备份库表结构,转译成可执行的建库建表语句
    2.备份完表结构后开始备份表的数据,转移成insert语句

    #备份单库
    mysqldump -uroot -p123456  world >world_dump.sql
    恢复单库流程1:
    mysql -uroot -p123456 dump_test<dump_test.sql 

    #备份多个库
    mysqldump -uroot -p123456  --databases dump_test dump_test1 >test12_dump.sql
    恢复方式2:登录mysql命令行,执行source +sql文件
    system 是直接调用linux命令

    #备份单个库的多张表:
    mysqldump -uroot -p123456  world table1 table2 table3 >world_dump.sql

    ##sql命令行执行系统指令加system :system ls -l

##mysqldump 远程备份:
    在只有select权限时,通过添加--skip-lock-tables(用户没有锁表权限,只有select权限),也可以做备份
    mysqldump -h62.234.124.229 -udump_user --skip-lock-tables -p123456 dump_test >dump_test.sql

    备份g3_lps_meta库的game_group表:--column-statistics=0 mysql8.0版本新加的参数,其他版本不需要
    mysqldump --column-statistics=0 -h18.6.3.72 -P31306 -ulps  -p0000abc!  g3_lps_meta game_group >world_dump.sql

##只备份结构
    -d 可以用来构建空的测试环境。
    mysqldump -h62.234.124.229 -udump_user -d --all-databases >all_struct.sql

##sql语句方式备份数据(注意备份路径有参数限制)
    select ... into outfile ‘xxx‘
    | secure_file_priv | /var/lib/mysql-files/ |
    这个参数要求outfile 后面的文件必须在这个目录才可以
    select * from dump_t1 into outfile ‘/var/lib/mysql-files/ss.txt‘;
    load data infile ‘/var/lib/mysql-files/ss.txt‘ into table dump_test.dump_t1 ;

##创建一个新表,做数据备份
    create table tb_bk as select * from tb;

##创建一个新表,基于后面的sql查询结果
    create table citytop10 as select Name,Population from city order by Population desc limit 10;
    create table city_bak as select * from city ;
    1.两个表的数据一定一致
    2.结构,字段类型长度都一致,新表是没有索引的。一定要注意
    3.恢复可以用rename操作,但要注意结构变化,比如索引
    rename table city_bak to city;

##总结
    1.mysqldump
    2.select into outfile(注意文件存放目录权限)
    3.create table tb_bak as select 

##mysqldump操作注意点:
    1.默认mysqldump备份只需要select权限和lock-tables权限
    2.默认mysqldump备份是会锁表的,尽量避免线上环境直接备份
    3.恢复,恢复会有drop表的操作,或其他覆盖性操作,所以恢复前一定check

##物理备份:是基于linux系统直接拷贝物理文件的备份,
    分冷备(cp数据目录)与热备(xtrabackup)
    冷备:把服务停下来,直接备份数据目录
    show global variables like "%datadir%"
    | datadir       | /var/lib/mysql/ |

    #停掉mysql服务,直接拷贝数据目录,也就是datadir
    cp -r mysql mysql_bak

    #恢复就是把原来目录删除,用备份目录替换

    为什么要停mysql?
    innodb引擎下,有大量的数据是在内存中的,并没有落地磁盘,    所以必须先停服让内存数据落盘再拷贝。

############MySQL的集群架构

1.主从复制
    初始化mysql的数据目录(注意备份):mysql_install_db --datadir=/var/lib/mysql --user=mysql

    62.234.124.229 主
    192.144.217.235 从
2.打开binlog,配置server-id
    229主:binlog=on,server-id=12
    235从:binlog=on,server-id=10

    需要保证server-id不能相同

3.配置权限账号
    在229主配置
    replication slave replication client
    grant replication slave,replication client on *.* to [email protected]‘62.234.124.229‘ identified by ‘123456‘;

4.找binlog同步位置
    在229主上找到当前binlog位置
    show master status;
    +---------------------------+----------+--------------+------------------+-------------------+
    | File                      | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------------------+----------+--------------+------------------+-------------------+
    | VM_0_15_centos-bin.000001 |      500 |              |                  |                   |
    +---------------------------+----------+--------------+------------------+-------------------+

##建立同步
    在235从
    change master to master_host=‘62.234.124.229‘,
             master_user=‘slave_user‘,
             master_password=‘123456‘,
             master_log_file=‘VM_0_15_centos-bin.000001‘,
             master_log_pos=500;

5.启动同步,查看同步状态
    start slave;

    show slave status;
        Slave_IO_Running: Yes
        Slave_SQL_Running: Yes
        只要这两个线程是yes的,就表示正常同步中

##主从同步的注意事项:
    为了保证主从数据的一致性,从服务器上不要有变更操作
    读写分离:凡是写的请求都到主,读的请求可以到从执行,配合一主多从架构,可以极大的扩展集群的承载能力

    应用的读写比:10:1
    读写分离需要注意一点,主从同步是可能产生延迟的,理论是1秒以内,特殊场景
    可能产生几分钟甚至几小时的数据延迟。
    延迟的敏感的业务,读写都在主上。
    可以支持到1主20从

###mysql 的HA,也叫高可用切换 High avilibale

    1.最简单的方式是接入vip,用keepalive来做高可用
        映射IP 192.144.217.100  --> 62.234.124.229 主
        主服务器故障时映射IP192.144.217.100 --> 192.144.217.235 从
        192.144.217.235成为主,下一步就补充新的从

        问题:  数据延迟不一致。丢失风险
        引入一些新的HA策略,比如开源组件MHA  

###主主复制
    但是也要求只有一侧可以写入
    优点:可以来回切写

    主服务器执行:
    change master to master_host=‘192.144.217.235‘,  ##从服务器的地址
             master_user=‘slave_user‘,
             master_password=‘123456‘,
             master_log_file=‘VM_0_10_centos-bin.000002‘,
             master_log_pos=783;

    log_slave_update:控制从上relay执行后,是否记录到binlog
    如果打开了也不会循环,server-id不同,不会自己执行自己的binlog

##mysql数据库的缓存:
    querycache
    query_cache_type               | OFF 

    缓存:可以缓存的是sql完全一致的请求
    默认是关闭的,也建议关闭;写入比较大的时候会造成系统负载

    关掉cache之后,业务上引入的就是redis了,性能更好
    redis理论的QPS 在10w左右;
        所有数据放在内存
        单线程架构,只占用一个CPU

    1G内存的redis、10G内存的redis 哪一个QPS更高/每秒的查询数:
    答案:一样的。

    采用redis来做mysql上层的缓存,redis是如何缓存mysql数据的,哪些缓存,哪些不缓存
    答案:通过业务控制

##数据库性能测试的瓶颈
    1.磁盘IO
    2.内存大小
    3.cpu主频

##压测工具,基准测试;sysbench
    可以做linux压测,也可以做数据库压测

##专门的数据库TPS测试工具,tpcc-mysql

原文地址:https://www.cnblogs.com/xiaoxiao075/p/12175285.html

时间: 2024-10-02 00:20:24

mysql 数据库的主从复制及备份、恢复的相关文章

MySQL数据库使用命令行备份

一.MySQL数据库使用命令行备份 例如: 数据库地址:127.0.0.1 数据库用户名:root 数据库密码:pass 数据库名称:myweb 备份数据库到D盘跟目录 mysqldump -h127.0.0.1 -uroot -ppass myweb > d:/backupfile.sql 备份到当前目录 备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库 mysqldump --add-drop-table -h127.0.0.1 -uroot -pp

centos mysql 实战 第十二节课 备份恢复 备份方案 备份可以分为几种形式 mysqldump 在不同版本里对性能会不会有影响? mysqldump 的用户需要什么权限 mysqldump 支持Where条件 备份评估

centos mysql 实战 第十二节课  备份恢复  备份方案  备份可以分为几种形式  mysqldump 在不同版本里对性能会不会有影响?   mysqldump 的用户需要什么权限   mysqldump 支持Where条件  备份评估 阿里云Percona-live 2016-4 基于Innodb物理复制 mysql5.7没有线程池,需要用percona版本mysql才有,percona的定位是做免费的企业版mysql mysql5.6的memcached插件只是提供memcache

MySQL数据库的定时自动备份

昨天做了MySQL数据库的备份基本操作的实验,今天试一下MySQL数据库的定时自动备份. 大概思路就是,首先为备份文件单独创建一个目录,然后再目录下创建Shell脚本里写上执行数据库备份的命令,并且给这个Shell脚本添加可执行的权限,最后给这个Shell脚本添加到crond计划任务,让它每天定时执行. 1.首先进入home目录,创建一个mysqlBackup的目录,然后进入这个目录 2.创建一个.sh后缀的文件, 3.编辑Shell脚本,备份所有数据库到/home/mysqlBackup目录下

16、MySQL数据库分库分表备份脚本

MySQL数据库分库分表备份脚本 ===================学员分享分库分表========================== 脚本单双引号的区别: 单引号是强引用,强制输出是所见即所得. 双引号是解析变量 和 多个字符串.数字等连接一个字符串 条件1  ||    条件2                      或   假真   真假 条件1 && 条件2                      并   真真    假假 !条件1  && 条件2    

MySQL数据库ab主从复制出错及解决过程

MySQL数据库ab主从复制出错及解决过程 一.mysql主从服务器报错描述:Slave_IO_Running=NO,Slave_SQL_Running=YES,Last_Errno=0 mysql slave stop ; mysql slave start; mysql show slave status ; 如果Slave_IO_Running=YES ...解决过程 :1 如果:Slave_IO_Running=NO,Slave_SQL_Running=YES,Last_Errno=0m

mysql数据库远程同步及备份

复制解决的基本问题是让一台服务器的数据和另外的服务器保持同步.一台主服务器可以连接多台从服务器,并且从服务器也可以反过来作为主服务器.主服务器和从服务器可以位于不同的网络拓扑中,还能对整台服务器.特定的数据库,甚至特定的表进行复制.Mysql复制大部分都是向后兼容的.这意味着版本较新的服务器可以是版本较老的服务器的从服务器.但老版本的服务器通常不能是新版本号的服务器的从服务器.复制通常不会大幅增加主服务器的开销.它需要主服务器启用二进制日志,这或许会有较大的开销,但是出于备份的目的,无论如何这种

MySQL基于LVM快照的备份恢复

目录 1.数据库全备份 2.准备LVM卷 3.数据恢复到LVM卷 4.基于LVM快照备份数据 5.数据灾难恢复 6.总结 写在前面: 测试环境中已安装有mysql 5.5.36数据库,但数据目录没有存放在LVM卷,此次要演示基于LVM的数据备份和恢复,所以就把mysql的数据先迁移到LVM上再做快照卷的备份. 如果innodb表基于LVM来做备份,那事务日志文件和数据文件要在同一个LVM的逻辑卷上,因为在同一时刻我们只能对一个逻辑卷做快照,如果事务日志与数据文件不在同一卷上,那做快照后会导致事务

mysql 增查删改,备份恢复,授权等基础常用命令

增 创建库,表 查 查看有哪些表,哪些库 删 删除库,删除表 改 修改表数据 mysql 登录   mysql -uroot -p(跟密码)mysql 命令大部分都是以:结尾 增   create   (da1 库名 ta1 表名) 创建库 create database da1; 创建表 create table ta1 (`id` int(4), `name` char(40)); id/第1个字段名字   int/类型 /整形4位   第2个是name    类型是char  字符串最多4

linux centos下mysql数据库的主从复制环境搭建

有两台MySQL数据库服务器Master和slave,Master为主服务器,slave为从服务器,初始状态时,Master和slave中的数据信息相同,当Master中的数据发生变化时,slave也跟着发生相应的变化,使得master和slave的数据信息同步,达到备份的目的. 原理图如下: 简单来说,mysql的主从复制的原理就是slave把master上面执行的 update,insert这些会使数据发生改变的sql语句从master上面同步过来,然后在自己的机器上再执行一遍,那么这两台数