从数据库,对数据进行备份

作者: 操作系统  发布:2019-11-20

 show   master  status;

[root@slave ~]# systemctl restart mariadb
[root@slave ~]# mysqladmin -uroot password 123123
[root@slave ~]# mysql -uroot -p123123

4.防火墙没关闭或者没开放mysql端口

 mysql >slave start;

 mysql服务器作为生产环境中使用最广泛的数据库软件,以其开源性,稳定性而广泛使用,但同时由于数据存储,读写频率高,极易造成数据库出错,从而给企业造成不可挽回的损失,我们除了做好数据库的备份工作外,同时,还应该解决数据库服务器的单点故障问题。

MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.00 sec)

| Database          |

  

两项为yes,则代表启动从服务成功。

图片 1

| test              |

   [root@test2 /]# mysql -utongbu -ptongbu -h192.168.1.7

到两台的数据库下查看,select   *  from  test;

master---192.168.1.46

一.工作环境及条件

      -> master_log_file='mysql-bin.000024',

登录mysql,   mysql   -uroot   -p123456  

[root@master ~]# mysql -uroot -p

Query

错误排查:

yum  -y install  keepalived

一 、企业网站单个 MySQL 问题分析
在企业网站中,后端 MySQL 数据库只有一台时,会有以下问题:单点故障,服务不可
用;无法处理大量的并发数据请求;数据丢失将造成大灾难。
改造办法:
增加 MySQL 数据库服务器,对数据进行备份,形成主备。
确保准备 MySQL 数据库服务器是一样的
主服务器宕机了,备份服务器继续工作,数据有保障
MySQL 主从复制与读写分离是密切相关

4 rows in set (0.01 sec)

    命令:firewall-cmd  --state

relay-log-index=slave-relay-bin.index             # 传递日志的索引文件

[root@slave ~]# mysql -uroot -p123123

+------------+----------+--------------+------------------+

 mysql >slave stop;

创建myslave 账号,并授权可以复制

注意:

+--------------------+

 

create  table  test;

[root@master ~]# systemctl restart mariadb

从数据库上:

  2.在A服务器中的mysql安装路径下(rpm安装路径为/var/lib/mysql)创建全库备份文件all.sql。

查看另一台的主mysql  的ip,ip a

所有服务器关闭防火墙、关闭selinux

[root@master ~]# yum -y install mariadb*

   3)为关闭状态

insert into  test   values();

[root@slave ~]# yum -y install ntpdate

| performance_schema |

A服务器ip:192.168.1.7   主机名:test1

vim  /etc/keepalived.conf

MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| testdb |
+--------------------+
5 rows in set (0.00 sec)

| Database          |

  3.关闭selinux策略

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

[root@slave ~]# ntpdate 192.168.1.46
23 Aug 17:50:14 ntpdate[3407]: adjust time server 192.168.1.46 offset 0.000029 sec
[root@slave ~]# crontab -e

[root@master ~]# mysql -uroot -p123456

B服务器ip:192.168.1.8   主机名:test2

可以在主mysql服务器上看到一个VIP地址,172.16.1.199

 

安装MYSQL(yum源安装)

   命令:hostnamectl  set-hostname  xxx

create  database  test  default  character  set  utf8;

[root@master ~]# yum -y install ntp

2.从数据库

 3)二进制文件位置不对

 

10 log-bin=mysql-bin
11 log-slave-updates=true #手动添加,开启从日志
12 server-id=11

修改从数据库的my.cnf,在[mysqld]如下:

    命令:getenforce

登录mysql,   mysql   -uroot   -p123456  

[root@master ~]# vim /etc/my.cnf

MariaDB [(none)]> change master to master_host='172.25.0.11',master_user='admin',master_password='123456',master_log_file='lhb.000001',master_log_pos=537;

 检查MySQL> show slave statusG;时,Slave_IO_Running状态为Connecting错误,出现的原因主要分为三种,需要检查配置:

show slave statusG;         #显示从服务状态

配置从服务器

假如你的Slave_IO_Running:Connecting或者No

    命令:mysql> show master statusG

显示主服务的状态;

一台主服务器可以做多个从服务器,从服务器也可以充当主服务器,再做多个从服务器,以此类推....

Query OK, 0 rows affected (0.03 sec)

    图片 2

1)对于mysql源码安装或者yum 安装均可,此处不多讲。

三、MySQL 主从备份案例

设置mysql登录密码(默认情况下登录密码为空)

   4)检查防火墙状态

vim my.cnf

图片 3

Query OK, 0 rows affected, 1 warning (0.00 sec)

   把all.sql文件拷贝到B服务器中的某个路径下(以/var/lib/mysql路径为例)进行恢复。

在从mysql服务器上配置

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.01 sec)

[root@slave ~]# mysql -uroot -p123456

    命令:systemctl  stop  firewalld

[mysqld]
log-slave-updates=true                            #开启从服务器的日志更新
server-id = 11                                          #主服务器的ID ,这个可以随便定,但是与从服务器要不同

从服务器复制了主服务器上的数据库,主从复制成功。

那么可能出现以下几点问题:

    mysql> start slave;

2) 主MySQL配置

1、MySQL 从服务器开启 I/O 线程,向主服务器请求数据同步(获取二进制日志)
2、MySQL 主服务器开启 I/O 线程回应从服务器
3、从服务器得到主的二进制日志写入中继日志
4、从服务器开启 SQL 线程将日志内容执行,实现数据同步

| mysql              |

    命令:firewall-cmd  --state

配置mysql目录下的 my.cnf文件

在[mysqld]模块下手动添加

+--------------------+

   2)在B服务器中配置连接服务器

启动服务,service  keepalived  start

从服务器上进行时间同步

| Database          |

   server-id=2    

配置mysql目录下的 my.cnf文件

MariaDB [(none)]> show slave statusG;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.46
Master_User: myslave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 613
Relay_Log_File: relay-log-bin.000002
Relay_Log_Pos: 529
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 613
Relay_Log_Space: 821
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 11
1 row in set (0.00 sec)

+------------+----------+--------------+------------------+

    图片 4

一台 mysql 服务器 + keepalived

22 server 127.127.1.0 // 手动添加此两行内容
23 fudge 127.127.1.0 startum 8

+--------------------+

一、准备

 到另一台MySQL上show   databases;  show   tables;

MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| testdb |
+--------------------+
5 rows in set (0.00 sec)

主数据库:172.25.0.254

      -> master_log_pos=154;

mysql  -uroot  -p123456 任意登录一台mysql服务器,

[root@slave ~]# vim /etc/my.cnf

在主数据库上新建数据库,看看是否会同步。

      -> master_password='tongbu',

如果

[root@slave ~]# yum -y install mariadb-*

| test              |

  5.设置B为主服务器,A为从服务器。

4.测试

两台CentOS7服务器

| performance_schema |

A、B两台服务器分别安装mysql-5.7.18服务端,配置成互为主从同步。

其他与主mysql服务器上配置文件相同

MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 613 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> show databases;

   1)查看B服务器mysql中的二进制日志名和偏移量

use test;

MariaDB [(none)]> grant replication slave on *.* to 'myslave'@'192.168.1.%' identified by '123123';
Query OK, 0 rows affected (0.00 sec)

+--------------------+

 mysql >SET GLOBAL sql_slave_skip_counter = 1;

 show   master  status;

若在 从服务器 start slave; 之后发现 Slave_IO_Running: No 、Slave_SQL_Running: Yes ,则
需要先 stop slave; 重新 change master to …; 再 start slave;

[root@master ~]# yum clean all

   server-id=1       #必须与其他服务器不同,且必须为1~232之间的正整数值

start   slave;                       #开启从服务

在从服务器查看是否数据同步

(记录File、Position的值,设置从数据库的时候会用到)

1.Slave_IO_Running状态错误

登录成功,我们做一个 插入数据实验

[root@master ~]# mysql -uroot -p123123

MariaDB [(none)]> create database lhbdb;

   2)防火墙是运行状态,先关闭防火墙服务

log-bin=mysql-bin                                    #开启二进制日志

给从服务器授权

登录主库赋予从库权限账号,允许用户在主库上读取日志(用户名:admin,密码:123456)

   测试无问题后重启A、B服务器中的mysql服务:[root@test /]# service mysqld restart

cp  /etc/keepalived/keepalived.conf    /etc/keepalived/keepalived.conf.bak

二、主从复制原理原理
MySQL 主从复制的类型:
·基于语句的复制
·基于行的复制
·混合类型的复制

5 rows in set (0.00 sec)

  1. 跳过异常恢复同步

4)以上两步实现了mysql主从复制,我们要实现主主,也就是两台mysql ,一台既是主,也是从,另一台既是主也是从,所以我们按照上面的配置在两台mysql上做相反的从主配置。

MariaDB [(none)]> change master to
-> master_host='192.168.1.46', 
-> master_port=3306,
-> master_user='myslave',
-> master_password='123123',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=613;
Query OK, 0 rows affected (0.01 sec)

| lhbdb              |

      -> master_host='192.168.1.7',

创建myslave 账号,并授权可以复制

[root@slave ~]# crontab -l

4 rows in set (0.01 sec)

    mysql> change master to

yum  -y install  keepalived

[root@master ~]# vim /etc/ntp.conf

| lhbdb              |

至此两台mysql数据库互为主从同步配置完成。

可能的问题一是主服务和从服务的server-id,不能为重复;二是授权时一定要准确。grant   replication slave   on  *.*  to  'myslave'@'172.16.1.12'     identified   by  '123456';

在 MySQL  主服务器创建 test db数据库

5 rows in set (0.01 sec)

  1.打开A服务器的my.cnf文件vi  /etc/my.cnf,在文件的[mysqld]下添加如下内容

ntpdate  172.16.1.2      时间同步

10 relay-log=relay-log-bin
11 relay-log-index=slave-relay-bin.index
12 server-id=12 #主从服务器的 server-id  不能相同!

重启下数据库

   log-bin=mysql-bin

grant   replication slave   on  *.*  to  'myslave'@'172.16.1.12'     identified   by  '123456';

[root@master ~]# chkconfig ntpd on

看到以下两行为Yes,表示成功了

   在B服务器my.cnf文件中的[mysqld]下添加上图内容,只更改server-id值即可。

MySQL安装时间同步器,yum  -y  install ntpdate

*/5 * * * * /usr/sbin/ntpdate 192.168.1.46

MariaDB [(none)]> show slave statusG;

  4.设置A为主服务器,B为从服务器。

1.实验目的

[root@master ~]# systemctl start ntpd

1.主从两个数据库不通。

    mysql> stop slave;

log-bin=mysql-bin                                            #开启二进制日志

通过查看 slave  状态,确保 Slave_IO_Running: Yes Slave_SQL_Running: Yes

3.position设置错误

    mysql> show slave statusG 查看Slave_IO_Running和Slave_SQL_Running的值是否为Yes

启动service   ntpd  start

slave---192.168.1.47

[root@slave ~]# vim /etc/my.cnf

 1)网络不通  

配置mysql目录下的 my.cnf文件

配置 MySQL Master  主服务器

[root@slave ~]# yum clean all

   恢复命令:[root@test2 /]# mysql -uroot -p123 < /var/lib/mysql/all.sql

登录mysql,   mysql   -uroot   -p123456  

建立时间同步环境 , 在主服务器上安装配置 NTP  时间同步服务器

server-id=2

 

change  master  to  master_host ='172.16.1.2',master_user='myslave',master_password='123456',master_log_file='此处为主服务show  master 命令显示的 file',master_log_pos='此处为主服务show  master 命令显示的 pos'';

+--------------------+

 

3)从mysql服务配置

+--------------------+

   1)查看防火墙状态

3.环境部署

重启服务使配置生效

      [root@test1 /]# mysql -utongbu -ptongbu -h192.168.1.8

可以看到有一vip ,172.16.1.199

MySQL版本:mariadb-5.5.35

    结果:not  running

172.16.1.2     mysql   + keepalived

1.主数据库

      -> master_user='tongbu',

数据同步成功,从而实现两台mysql数据库服务器的高可用及主主数据同步。

+--------------------+

      -> master_password='tongbu',

2.搭建环境

修改主库my.cnf主要设置个不一样的ID,以及同步的数据库的名字和端口号(默认为3306)

   1)查看selinux运行状态

在其中添加

MariaDB [(none)]> slave stop;

2.主备数据冲突或不同造成的异常

在主mysql服务器配置 

[root@master ~]# systemctl start mariadb

环境:

flush   privileges;

| information_schema |

    结果:Enforcing

vrrp_instance VI_1 {                                         #实例1
    state MASTER                                             #状态为主
    interface ens33                                            #绑定网卡
    virtual_router_id 11                                      #   id 号,主从一致
    priority 100                                                   #优先级为100
    advert_int 1
    #nopreempt                                                  #非抢占模式
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {                                         #虚拟ip地址
        172.16.1.199
    }
}
virtual_server 172.16.1.199 3306  {                 
     delay_loop 2                                                  #间隔2秒检查真实服务器状态 
     lb_algo wrr                                                     #LVS   arithmetic
     lb_kind DR                                                     #LVS model
     persistence_timeout 60                                  #k
     protocol TCP 
     real_server 172.16.1.2 3306  {                        #真实服务器 ,也就是主mysql服务器
         weight 3 
         #notify_down /usr/local/mysql/bin/mysql.sh  # 可执行脚本路径 
         TCP_CHECK { 
             connect_timeout 10    #timeout
             nb_get_retry 3       #conect times to try to connect
             delay_before_retry 3   #interval of retry
             connect_port 3306    # check mysql port
         }
     } 
}

显示主数据看的信息

    图片 5

配置mysql目录下的 my.cnf文件

实现mysql主从在线同步

 2)账户权限配置错误,如密码不对、账号错误、地址错误  

显示主服务的状态;

Slave_IO_Running: Yes

   log-bin=mysql-bin

[mysqld] log-slave-updates=true                            #开启从服务器的日志更新

1 row in set (0.00 sec)

   2)永久性关闭(需重启电脑),编辑selinux文件vi  /etc/sysconfig/selinux修改SELINUX=disabled

relay-log=relay-log-bin                                     # 传递日志,前缀为 relay-log-bin

[root@master ~]# mysqladmin -uroot password '123456'

linux系统版本为CentOS7

172.16.1.12   mysql  + keepalived

MariaDB [(none)]> show databases;     

  

vim   /etc/ntpd.conf

log-bin=lhb

(同一局域网下)

vim my.cnf

设置mysql登录密码(默认情况下登录密码为空)

      -> master_host='192.168.1.8',

此处的master_host ='172.16.1.12'  为从mysql服务器的ip

MariaDB [(none)]> show master status;

   删除用户:mysql> drop user '用户名'@'%';

可以看到有一vip ,172.16.1.199

[root@master ~]# systemctl restart mariadb

    图片 6

relay-log=relay-log-bin                                     # 传递日志,前缀为 relay-log-bin

| information_schema |

    命令:systemctl  mask  firewalld

登录mysql,   mysql   -uroot   -p123456  

+--------------------+

    mysql> change master to

172.16.1.1

3.测试

   log-bin-index=mysql-bin

6)配置keepalived,实现高可用

MariaDB [(none)]> grant replication slave on *.* to 'admin'@'172.25.0.254' identified by '123456';

 主键冲突、表已存在等错误代码如1062,1032,1060等,可以在mysql配置文件指定略过此类异常并继续下条sql同步,这样可以避免很多主从同步的异常中断。打开/etc/ mysql下的my.cnf文件,在[mysqld]后添加如下代码:

添加

| test              |

   创建用户:mysql> create user 'tongbu'@'%' identified by 'tongbu';

数据同步成功。

| mysql              |

    A、B服务器用户创建完成后,测试用户相互是否可以远程登陆mysql。

relay-log-index=slave-relay-bin.index             # 传递日志的索引文件

Query OK, 1 row affected (0.00 sec)

    mysql> start slave;

show slave statusG;         #显示从服务状态

MariaDB [(none)]> slave start;

    如下图

如果Slave_IO_Running: No

| mysql              |

      -> master_log_pos=154;

                                           

登录数据库

   3)关闭防火墙

flush   privileges;

+--------------------+

  1.修改主机名

    #备用服务器上为SLAVE
    state SLAVE
    #绑定vip的网卡为ens33,根据自己服务器网卡
    interface ens33
    virtual_router_id 11                     #与主服务器  id号码一样
    #备用服务器上为90
    priority 90                                   #优先级比主mysql服务器小
}
virtual_server 172.16.1.199 3306 {  
     real_server 172.16.1.12 3306 {               #真实服务器 ,也就是从mysql服务器
}

MariaDB [(none)]> show databases;

二、配置主服务器(master)从服务器(slave)

启动  主mysql服务器上的keepalived服务,  service  keepalived  start

开启mariadb服务

  2.关闭防火墙

此处 master_host ='172.16.1.2',为主mysql的ip

在从数据库上设置同步

    命令:mysql> show master statusG

我们在测试机172.16.1.1上登录从mysql ,    mysql   -uroot   -p123456  -P 3306   -h  172.16.1.12

从数据库:172.25.0.11

    mysql> stop slave;

停止从mysql服务器上的keepalived服务,  service  keepalived  stop

| File      | Position | Binlog_Do_DB | Binlog_Ignore_DB |

 

server 127.127.1.0
fudge 127.127.1.0 startum 8

server-id=1

  3.在A、B服务器的mysql中创建用户用于同步。

主mysql上,做从配置 

+------------+----------+--------------+------------------+

      -> master_log_file='mysql-bin.000027',

此处172.16.1.12为从服务器的ip

为验证账号我们可以在从的机器上用命令作如下测试

   1)查看A服务器mysql中的二进制日志名和偏移量值

显示了数据库和数据表都已建好,可以看到已经同步成功

关闭防火墙(或者开发防火墙的mysql服务和3306端口)

   创建命令:touch  /var/lib/mysql/all.sql

 

二.mysql主从复制配置方法

 slave-skip-errors = 1062,1032,1060

两项为yes,则代表启动从服务成功。

在mysql里面输入

   备份命令:[root@test1 mysql]# mysqldump -uroot -p123 --all-databases > /var/lib/mysql/all.sql

一台测试机

| mysql              |

      -> master_user='tongbu',

主MySQL安装时间同步器,yum  -y  install ntp

+--------------------+

   2)在A服务器中配置连接服务器。

至此,两台MySQL服务器的分别配置了主从,即一台既是主又是从,另一台既是从也是主。

+--------------------+

   图片 7

重启服务   service  mysqld restart

[root@slave ~]# mysqladmin -uroot password '123456'

   (查看主机名 命令:hostname)

 停止主mysql服务器上的keepalived服务,  service  keepalived  stop

主数据库上创建数据库并查看

    结果:running

[mysqld]

| performance_schema |

   授权:mysql> grant all on *.* to 'tongbu'@'%';

vim  /etc/keepalived.conf

| test              |

    图片 8

log-bin=mysql-bin                                            #开启二进制日志

| Database          |

   log-bin-index=mysql-bin

本处只写与主mysql服务器不同处

从库上查看是否同步

    图片 9

start   slave;                       #开启从服务

| performance_schema |

    mysql> show slave statusG 输入此命令查看Slave_IO_Running和Slave_SQL_Running的值是否为Yes,如下图

Slave_IO_Running: Yes Slave_SQL_Running: Yes

[root@slave ~]# mysql -uadmin -p123456 -h 172.25.0.11

做同样的操作 insert into  test   values();

| information_schema |

 

由此可以看到在主数据库上建立数据库lhbdb,则表示成功了。^_^^_^^_^

记住file 及position位置的字符串,在配置从服务时候会用到。

主数据库上:

[mysqld]

[root@master ~]# systemctl stop firewalld.service

change  master  to  master_host ='172.16.1.12',master_user='myslave',master_password='123456',master_log_file='此处为主服务show  master 命令显示的 file',master_log_pos='此处为主服务show  master 命令显示的 pos'';

| lhb.000001 |      537 |              |                  |

cp  /etc/keepalived/keepalived.conf    /etc/keepalived/keepalived.conf.bak

+--------------------+

到两台的数据库下查看,select   *  from  test;

操作系统:RHRL7

grant   replication slave   on  *.*  to  'myslave'@'172.16.1.12'     identified   by  '123456';

MariaDB [(none)]> show databases;

记住file 及position位置的字符串,在配置从服务时候会用到。

[root@slave ~]# systemctl start mariadb

如果

2.server-id设置错误。

server-id = 12                                                  #服务器的ID ,这个可以随便定,但是与主服务器要不同

在[mysqld]中加入内容如下

重启服务   service  mysqld restart

[root@slave ~]# systemctl restart mariadb

两台 mysql 服务器

主数据库

5)mysql主主复制测试

从数据库

从mysql上,做主配置

Slave_SQL_Running: Yes

在其中添加

port=3306

至此,主 mysql 配置完成,重启service mysqld   restart

| information_schema |

启动服务,service  keepalived  start

[root@slave ~]# systemctl stop firewalld.service

同时查看另一台的从mysql  的ip,ip a

本文由9159.com发布于操作系统,转载请注明出处:从数据库,对数据进行备份

关键词: