从数据库,对数据进行备份
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,则代表启动从服务成功。
| 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)
1)对于mysql源码安装或者yum 安装均可,此处不多讲。
三、MySQL 主从备份案例
设置mysql登录密码(默认情况下登录密码为空)
4)检查防火墙状态
vim my.cnf
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)
+------------+----------+--------------+------------------+
一台 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)
- 跳过异常恢复同步
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
}
}
}
显示主数据看的信息
配置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
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服务器的分别配置了主从,即一台既是主又是从,另一台既是从也是主。
+--------------------+
重启服务 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 |
log-bin=mysql-bin #开启二进制日志
| Database |
log-bin-index=mysql-bin
本处只写与主mysql服务器不同处
从库上查看是否同步
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发布于操作系统,转载请注明出处:从数据库,对数据进行备份
关键词:
下一篇:没有了