GVKun编程网logo

Linux下MySQL数据库的主从同步复制配置

5

如果您想了解Linux下MySQL数据库的主从同步复制配置的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于CentOS7.1下MySQL数据库主从同步、linuxmysql主从复制配置、l

如果您想了解Linux下MySQL数据库的主从同步复制配置的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于CentOS7.1下MySQL数据库主从同步、linux mysql 主从复制配置、linuxcentos下mysql数据库的主从复制环境搭建_MySQL、linux下MySQL主从同步监控shell脚本的有价值的信息。

本文目录一览:

Linux下MySQL数据库的主从同步复制配置

Linux下MySQL数据库的主从同步复制配置

Linux下MysqL数据库的主从同步配置的好处是可以把这个方式当做是一个备份的方法,用来实现读写分离,缓解一个数据库的压力。让运行海量数据的时候无论是从速度还是效率上都大大提高,MysqL的主从复制至少是需要两个MysqL的服务,当然MysqL的服务是可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。这个就是MysqL主从备份原理。下面我们来看下具体同步配置的流程。

我们先来看下小编测试的环境:

CentOS 6.5 MysqL主从同步,MysqL版本5.6.25

主服务器:centos6.5 IP:192.168.1.101

从服务器:centos6.5 IP:192.168.1.102

一、主服务器相关配置

1、创建同步账户并指定服务器地址

[root@localhost ~]MysqL -uroot -p
MysqL>use MysqL
MysqL>grant replication slave on *.* to 'testuser'@'192.168.1.102' identified by '12345678';
MysqL>flush privileges #刷新权限

授权用户testuser只能从192.168.1.102这个地址访问主服务器192.168.1.101的数据库,并且只具有数据库备份的权限

2、修改/etc/my.cnf配置文件vi /etc/my.cnf

[MysqLd]下添加以下参数,若文件中已经存在,则不用添加

server-id=1 
log-bin=MysqL-bin #启动MysqL二进制日志系统,
binlog-do-db=ourneeddb #需要同步的数据库
binlog-ignore-db=MysqL #不同步MysqL系统数据库,若还有其它不想同步的,继续添加
[root@localhost ~]/etc/init.d/MysqLd restart #重启服务

3、查看主服务器master状态(注意File与Position项,从服务器需要这两项参数)

MysqL> show master status;
+------------------+----------+--------------+------------------+
| File      | Position | binlog_Do_DB | binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| MysqL-bin.000012 |   120 | ourneeddb| MysqL      |
+------------------+----------+--------------+------------------+

4、导出数据库

导出数据库之前先锁定数据库

flush tables with read lock;    #数据库只读锁定命令,防止导出数据库的时候有数据写入

unlock tables; #解除锁定

导出数据库结构及数据:MysqLdump -uroot -p ourneeddb > /home/ourneeddb.sql

导出存储过程及函数 :MysqLdump -uroot -p -ntd -R ourneeddb > ourneeddb_func.sql

tips:-ntd导出存储过程、-R导出函数

二、从服务器相关配置

1、修改/etc/my.cnf配置文件vi /etc/my.cnf

[MysqLd]下添加以下参数,若文件中已经存在,则不用添加

server-id=2  #设置从服务器id,必须于主服务器不同

log-bin=MysqL-bin  #启动MySQ二进制日志系统

replicate-do-db=ourneeddb  #需要同步的数据库名

replicate-ignore-db=MysqL  #不同步MysqL系统数据库

[root@localhost~ ]/etc/init.d/MysqLd restart #重启服务

2、导入数据库

导入过程这里不做阐述

3、配置主从同步

[root@localhost~ ]MysqL -uroot -p
MysqL>use MysqL 
MysqL>stop slave;
MysqL>change master to
   master_host='192.168.1.101',master_user='testuser',master_password='12345678',master_log_file='MysqL-bin.000012',master_log_pos=120; #log_file与log_pos是主服务器master状态下的File与Position
MysqL>start slave;
MysqL>show slave status\G;

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.101
Master_User: testuser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: MysqL-bin.000012
Read_Master_Log_Pos: 120
Relay_Log_File: orange-2-relay-bin.000003
Relay_Log_Pos: 283
Relay_Master_Log_File: MysqL-bin.000012
Slave_IO_Running: Yes
Slave_sql_Running: Yes
Replicate_Do_DB: orange
Replicate_Ignore_DB: MysqL,test,information_schema,performance_schema
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: 120
Relay_Log_Space: 1320
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: 1
Master_UUID: 773d2987-6821-11e6-b9e0-00163f0004f9
Master_Info_File: /home/MysqL/master.info
sql_Delay: 0
sql_Remaining_Delay: NULL
Slave_sql_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_sql_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0

 注意查看Slave_IO_Running: Yes  Slave_sql_Running: Yes 这两项必须为Yes 以及Log_File、Log_Pos要于master状态下的File,Position相同

如果都是正确的,则说明配置成功!

以上就是我们给大家整理的关于Linux下MysqL数据库的主从同步复制配置的全部内容,希望能够帮助到你。

CentOS7.1下MySQL数据库主从同步

CentOS7.1下MySQL数据库主从同步

环境:

Mater: CentOS7.1 5.5.52-MariaDB 192.168.108.133

Slave: CentOS7.1 5.5.52-MariaDB 192.168.108.140

1.导出主服务数据,将主备初始数据同步

master:

//从master上导出需要同步的数据库信息
MysqLdump -u*** -P*** --database test > test.sql
将master上的备份信息传输到slave上
scp /root/test.sql root@192.168.108.140:/opt/

slave:

进入slave的数据库 MysqL -u*** -P*** 清空test数据库 drop database test 导入master的test数据库信息 source /opt/test.sql

2.配置master和slave上的MysqL数据库

修改master的my.cnf文件 vim /etc/my.cnf master配置如下,在[MysqLd]下添加如下配置 #log-bin server-id = 1 log_bin = master-bin expire_logs_days = 10 max_binlog_size = 100M binlog-do_db = test binlog_ignore_db = MysqL 重启MysqL数据库 service MysqLd restart 如果安装的是mariadb可以重启mariadb systemctl restart mariadb.service

linux mysql 主从复制配置

linux mysql 主从复制配置

1、设置主库 master 的 servie-id 值并且开启 bin-log 功能参数
vi /etc/my.cnf
修改 my.cnf 的参数:
[mysqld]
server-id=1 // 每一个库的 server-id 必须都不一样
log-bin=mysql-bin

2、检查参数是否成功设置并重新启动
egrep "server-id|log-bin" /etc/my.cnf
重启命令见:mysql 安装或 mysql 数据库多实例

3、登录数据库检查参数的更改情况
show variables like ''server_id'';
show variables like ''log_bin'';

4、在主库上建立用于从库复制的账号
从库要想从主库复制数据,必须要有一个主库的账号允许从库访问
mysql -uroot -p''zjl123'' 
mysql> grant replication slave on *.* to ''rep''@''10.0.0.%'' identified by ''zjl123'';
mysql> flush privileges;
这里 *.* 表示所有数据库的所有表,也可以指示某个数据库的某个表
rep 为同步的账号,10.0.0.% 为授权的主机网段,使用了 % 表示允许整个 10.0.0.0 的网段可以访问 rep 用户
replication slave 就是主从复制需要的权限

5、检查主库创建的 rep 复制账号是否成功
mysql>select user,host from mysql.user;
mysql>select user,host from mysql.user where user = ''rep'';
mysql>show grants for rep@''10.0.0.%'';

实现对主库锁表只读,用于备份主库的数据到从库,使同步前数据一致,锁表时如果超过设置时间不操作会自动解锁
6、数据库锁表并查看自动解锁时长参数:
mysql>flush table with read lock;
show variables like ''%timeout%''

7、查看主库当前 binlog 文件名和备份点,从库请求复制时就从这个点开始
mysql>show master status;
或者
mysql -u root -p ''zjl123'' -e "show master status"

锁表后一定要单开一个 SSH 窗口,导出主库数据,如果数据很大(50G 以上),并且允许停机,可以停库直接打包数据文件进行迁移,那样更快。
8、备份主库数据:
mkdir /server/backup/ -p
mysqldump -u root -p ''zjl123'' --events -A -B |gzip >/server/backup/mysql_bak.$(date +%F).sql.gz
ls -l /server/backup/mysql_bak.$(date +F%).sql.gz
或者:
mysqldump -u root -p ''zjl123'' --events -A -B -x --master-data=1 |gzip >/server/backup/mysql_bak.$(date +%F).sql.gz
--master-data=1 参数会在备份数据里增加如下语句
--position to start replication or point -in-time recovery from change master to master_log_file=''mysql-bin-000005'',master_log_post=107;
此时从库在 change master 时就无需指定 binlog 文件名和位置了,因为在备份时已经备份了该语句

9、为了确保导出数据期间数据库没有数据插入,导库完毕时可以再次检查主库的状态信息,结果如下:
mysql -u root -p ''zjl123''  -e "show master status"
若无特殊情况,binlog 文件及位置点和锁表后导出数据前是一致的

10、开锁数据库表
mysql>unlock tables;

以下是从库上执行的操作
11、设置 server-id 值并关闭 binlog 功能
数据库的 server-id 一般在一套主从复制体系内是唯一的,这里从库的 server-id 要和主库及其他的从库的不同,并且要注释掉从误国的 binlog 参数配置,如果从库不需要做级联复制,并且不做备份用,就不需要开启 binlog 功能,开启了反而会增加从库磁盘的 i/o 压力。
但是,有以下两种情况需要打开从库的 binlog 功能,记录数据库更新的 sql 语句:
1、作为形如:A-->B-->C 这样的级联同步,中间的 B 数据库,就要开启 binlog 功能。
2、在从库需要备份时要开启 binlog 功能,因为数据库备份必须要有,全备和 binlog 日志,才是完整的备份。

12、把主库 msqldump 的数据导入到从库
cd /server/backup/
ls -l
ll
mysql -uroot -p''zjl123'' -S /data/3307/mysql.sock < mysql_bak.2015-07-27.sql
提示:如果备份时用了 - A 参数,则在还原到 3307 的时候,登录 3307 实例的密码也会和 3306 主库的一致,因为 3307 实例的授权表 mysql 也被覆盖了。

13、登录 3307 数据库后,配置复制参数
CHANGE MASTER TO
MASTER_HOST=''10.0.0.7'', #主库的 IP
MASTER_PORT=3306, #主库的端口
MASTER_USER=''rep'', #主库上建立的用于复制的用户 rep
MASTER_PASSWORD=''zjl123'', #rep 的密码
MASTER_LOG_FILE=''mysql-bin.000008'', #binlog 二进制文件 的名称
MASTER_LOG_POS=342; #binlog 二进制文件 的偏移量,即复制开始点

以上命令需要登录 mysql 之后在 mysql 里执行

也可以通过不登录数据库的内部命令行实现,如在命令行中输入命令如下:
mysql -uroot -p''zjl123'' -S /data/3307/mysql.sock<< EOF
CHANGE MASTER TO
MASTER_HOST=''10.0.0.7'',
MASTER_PORT=3306,
MASTER_USER=''rep'',
MASTER_PASSWORD=''zjl123'',
MASTER_LOG_FILE=''mysql-bin.000008'',
MASTER_LOG_POS=342;
EOF

上述的操作原理是把用户、密码、主库端口、IP 等信息写入从库的 master.info 文件中。
查看写入结果如下:
ll /data/3307/data/master.info
cat /data/3307/data/master.info

14、启动从库同步开关,并查看同步状态
mysql -uroot -p''zjl123'' -S /data/3307/mysql.sock -e "start slave;"
mysql -uroot -p''zjl123'' -S /data/3307/mysql.sock -e "show slave status\G;"

主从复制是否成功主要看以下 3 项的状态
mysql -uroot -p''zjl123'' -S /data/3307/mysql.sock -e "show slave status\G;"|grep "IO_Running|SQL_Running|_Behind_Master"
分别应该显示的内容为: yes yes 0

Slave_IO_Running: yes 这个是 IO 线程状态,IO 线程负责从从库到主库读取 binlog 日志,并写入从库中继日志,状态为 yes 表示 IO 线程工作正常。

Slave_SQL_Running: yes 这个是 SQL 线程状态,SQL 线程负责读取中继日志(relay-log)中的数据并转换为 SQL 语句应用到从数据库中,状态为 yes 表示 sql 线程工作正常。

Seconds_Behind_Master: 0,这个是复制过程中从库比主库延迟的秒数,这个参数很重要,但企业时更准确的判断主从复制延迟的方法为:在主库写时间戳,然后从库读取时间戳,和当前数据库时间进行比较,从而认定是否有延迟。

以上是主从复制的全部内容,测试主从复制,只需要在主库做修改操作,查看从库中是否做出了相同的改变即可。


15、查看 mysql 主从复制 I/O 线程状态
mysql>show processlist\G

16、问题一
当主库语句在从库执行时产生了冲突时,比如主库创建了一张表,从库已经存在该名称的表,就会创建不成功,这时候,主从同步就无法继续进行
解决:
show slave status\G
stop slave; #临时停止同步形状
set global sql-slave-skip-counter=1; #将同步指针移动一个,如果还不能同步,可以重复该操作
start slave;
set global sql-slave-skip-counter=n;#n>0,忽略执行 n 个更新
解决二:
可以根据错误号事先在配置文件中配置,跳过指定的不影响业务数据的错误,例如:
grep slave-skip /data/3306/my.cnf
slave-skip-errors = 1032,1062,1007

17 从库需要记录 binlog 日志的方法:
在从库的 my.cnf 中加入如下参数,然后重启服务即可
log-slave-updates #必须要有这个参数
log-bin=/data/3307/mysql-bin
expire_logs_days=7 #相当于 find /data/3307/-type f -name "mysql-bin.000*" -mtime +7 | xargs rm -f

 

linuxcentos下mysql数据库的主从复制环境搭建_MySQL

linuxcentos下mysql数据库的主从复制环境搭建_MySQL

有两台mysql数据库服务器master和slave,master为主服务器,slave为从服务器,初始状态时,master和slave中的数据信息相同,当master中的数据发生变化时,slave也跟着发生相应的变化,使得master和slave的数据信息同步,达到备份的目的。

原理图如下:

\

简单来说,mysql的主从复制的原理就是slave把master上面执行的 update,insert这些会使数据发生改变的sql语句从master上面同步过来,然后在自己的机器上再执行一遍,那么这两台数据库服务器上的数据就一模一样了,而那些要同步的sql语句就存在bin-log文件里面

我这里有两台机器分别是192.168.1.6(master) 192.168.1.5(slave)

\

我们先从master机器开始配置

修改/etc/my.cnf 文件(mysql启动默认是从/etc/my.cnf读取的,所以你别的地方有配置文件的话建议直接移到/etc目录下)

 

[client]
port = 3306
socket = /usr/local/mysql/mysql.sock

[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci

skip-external-locking
skip-name-resolve

user = mysql
port = 3306
basedir = /usr/local/mysql
datadir = /home/mysql/data
tmpdir = /home/mysql/temp
# server_id = .....
socket = /usr/local/mysql/mysql.sock
log-error = /home/mysql/logs/mysql_error.log
pid-file = /home/mysql/mysql.pid

open_files_limit = 10240

back_log = 600
max_connections=500
max_connect_errors = 6000
wait_timeout=605800

#open_tables = 600
#table_cache = 650
#opened_tables = 630

max_allowed_packet = 32M

sort_buffer_size = 4M
join_buffer_size = 4M
thread_cache_size = 300
query_cache_type = 1
query_cache_size = 256M
query_cache_limit = 2M
query_cache_min_res_unit = 16k

tmp_table_size = 256M
max_heap_table_size = 256M

key_buffer_size = 256M
read_buffer_size = 1M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M

lower_case_table_names=1

default-storage-engine = INNODB

innodb_buffer_pool_size = 2G
innodb_log_buffer_size = 32M
innodb_log_file_size = 128M
innodb_flush_method = O_DIRECT

#####################
thread_concurrency = 32
long_query_time= 2
slow-query-log = on
slow-query-log-file = /home/mysql/logs/mysql-slow.log  

## replication
server_id=6
binlog-ignore-db=mysql
log-bin=master-mysql-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062

[mysqldump]
quick
max_allowed_packet = 32M

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
登录后复制

这里主要的配置就是和复制相关的这段配置,其它配置是mysql源码安装时配置,里面具体参数代表什么意思可以网上搜一下,文档很多的

## replication
server_id=6
binlog-ignore-db=mysql
log-bin=master-mysql-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
登录后复制
我简单解释一下,复制有关的参数

serverid 全局唯一的

binlog-ignore-db=mysql复制过滤,我们不同步mysql系统自带的数据库

log-bin=master-mysql-bin 开启logbin功能并设置logbin文件的名称

binlog_format=mixed 混合型复制模式,默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

接下来重启mysql服务并用客户端登录

\

slave想要同步master上的数据首先肯定需要权限,所以我们要在master上面开通权限

grant replication slave, replication client on *.* to &#39;root&#39;@&#39;192.168.1.5&#39; identified by
&#39;root&#39;;
登录后复制
账号和密码都是root ,允许192.168.1.5这台机器向master发送同步请求,当然你可以设成别的,我这里只是为了方便记忆,设了太多不同的密码容易忘记

\

刷新一下授权信息,然后查看当前master的状态

\

show master status,我这里解释一下,我们知道关于对数据库修改的sql全部记录在了bin-log里面,那么我们就每次都把bin-log里面的sql全部执行一遍?肯定不是,我们肯定要记录我上次复制到哪儿里了,然后我下次再从这个点开始同步,就像我们玩单机游戏闯了3关以后要存下档一样,下次玩我们继续从第三关开始玩,这是一个意思。

接下来我们随便写点测试数据到数据库里面去

create database if not exists pcx default charset utf8 collate utf8_general_ci;
use pcx;
DROP TABLE IF EXISTS `fruits`;
CREATE TABLE fruits
(
f_id    char(10)     	NOT NULL,
s_id    INT        	NOT NULL,
f_name  char(255)  	NOT NULL,
f_price decimal(8,2)  	NOT NULL,
PRIMARY KEY(f_id) 
)ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

INSERT INTO fruits (f_id, s_id, f_name, f_price)
     VALUES(&#39;a1&#39;, 101,&#39;apple&#39;,5.2),
     (&#39;b1&#39;,101,&#39;blackberry&#39;, 10.2),
     (&#39;bs1&#39;,102,&#39;orange&#39;, 11.2),
     (&#39;bs2&#39;,105,&#39;melon&#39;,8.2),
     (&#39;t1&#39;,102,&#39;banana&#39;, 10.3),
     (&#39;t2&#39;,102,&#39;grape&#39;, 5.3),
     (&#39;o2&#39;,103,&#39;coconut&#39;, 9.2),
     (&#39;c0&#39;,101,&#39;cherry&#39;, 3.2),
     (&#39;a2&#39;,103, &#39;apricot&#39;,2.2),
     (&#39;l2&#39;,104,&#39;lemon&#39;, 6.4),
     (&#39;b2&#39;,104,&#39;berry&#39;, 7.6),
     (&#39;m1&#39;,106,&#39;mango&#39;, 15.6),
     (&#39;m2&#39;,105,&#39;xbabay&#39;, 2.6),
     (&#39;t4&#39;,107,&#39;xbababa&#39;, 3.6),
     (&#39;m3&#39;,105,&#39;xxtt&#39;, 11.6),
     (&#39;b5&#39;,107,&#39;xxxx&#39;, 3.6);
登录后复制
\

接下来我们把pcx这个库下的数据全部备份下来

首先我们要锁表

flush tables with read lock;
登录后复制
接下来用mysql的备份命令进行备份

\

最后我们把edu-master.sql发送到slave的机器上面

好了,我们接下来开始配置slave(192.168.1.5)

同样打开my.cnf文件开始配置

vi /etc/my.cnf
登录后复制

[client]
port = 3306
socket = /usr/local/mysql/mysql.sock

[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci

skip-external-locking
skip-name-resolve

user = mysql
port = 3306
basedir = /usr/local/mysql
datadir = /home/mysql/data
tmpdir = /home/mysql/temp
# server_id = .....
socket = /usr/local/mysql/mysql.sock
log-error = /home/mysql/logs/mysql_error.log
pid-file = /home/mysql/mysql.pid

open_files_limit = 10240

back_log = 600
max_connections=500
max_connect_errors = 6000
wait_timeout=605800

#open_tables = 600
#table_cache = 650
#opened_tables = 630

max_allowed_packet = 32M

sort_buffer_size = 4M
join_buffer_size = 4M
thread_cache_size = 300
query_cache_type = 1
query_cache_size = 256M
query_cache_limit = 2M
query_cache_min_res_unit = 16k

tmp_table_size = 256M
max_heap_table_size = 256M

key_buffer_size = 256M
read_buffer_size = 1M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M

lower_case_table_names=1

default-storage-engine = INNODB

innodb_buffer_pool_size = 2G
innodb_log_buffer_size = 32M
innodb_log_file_size = 128M
innodb_flush_method = O_DIRECT

#####################
thread_concurrency = 32
long_query_time= 2
slow-query-log = on
slow-query-log-file = /home/mysql/logs/mysql-slow.log  


## replication
server_id=5
binlog-ignore-db=mysql
log-bin=mysql-slave-bin
binlog_cache_size = 1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
relay_log=mysql-relay-bin
log_slave_updates=1
read_only=1


[mysqldump]
quick
max_allowed_packet = 32M

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
登录后复制
配置文件和master的差不多,主要差别在一下几点

log-bin=mysql-slave-bin开启了二进制日志,实际上不开也没关系,因为我们这个slave只是做slave,如果你这台slave还有可能要做别人的master的话那么必须开启

relay_log=mysql-relay-bin配置中继日志,用来存放从master的bin-log那边同步来的数据

配置好后重启数据库服务

service mysql restart
登录后复制

我们首先要创建一下数据库,因为我们备份下来的数据库文件里面是不包含创建数据库的命令的,所以我们要手动创建一下

\

把我们从master那边备份过来的数据恢复到slave中

\

登录 Slave 数据库

\

在mysql客户端中输入一下命令连接master

\

change master to ,
master_host=''192.168.1.6'' master主机的ip地址

master_user=''root'',

master_password=''root'', 我们刚刚在master有执行过授权的账号密码就是这个

master_port=3306,master数据库的端口号

master_log_file=''edu-mysql-bin.000002'',

master_log_pos=427, 这个是我们通过show master status看到的position

master_connect_retry=30;

使用命令查看slave状态,我们可以看到slave目前还未开始同步

 show slave status\G;
登录后复制
\

开始主从同步,主要看到两个yes就代表同步成功了

start slave;
登录后复制
\

在master机器上查看状态,可以看见slave的连接信息

show processlist\G;
登录后复制
\

 

接下来我们测试一下主从复制的功能

master 上原来的数据

\

这是我插入的记录

\

我们到slave上面看看有没有,有就代表成功了

\

至此mysql原生支持的主从复制搭建完毕,当然我们说mysql的主从复制

性能上回有延迟,master上的数据不是无延迟的同步到slave上面,所以如果你对数据的一致性要求非常高的话,那么mysql官方的主从复制就不合适了,可以考虑用别的数据同步方案例如“Galera Cluster for MySQL” ,当然也有人说mysql官方支持的主从复制只是适合在中小规模的集群下运行。

 

 

 

linux下MySQL主从同步监控shell脚本

linux下MySQL主从同步监控shell脚本

说明:

操作系统:CentOS

目的:定时监控MySQL主从数据库是否同步,如果不同步,记录故障时间,并执行命令使主从恢复同步状态

1、创建脚本文件

vi /home/crontab/check_mysql_slave.sh   #编辑,添加下面代码

#!/bin/sh

# check_mysql_slave status

# author www.osyunwei.com

ip=eth0  #网卡名称

mysql_binfile=/usr/local/mysql/bin/mysql

mysql_user=root  #MySQL数据库账号

mysql_pass=123456  #密码

mysql_sockfile=/tmp/mysql.sock

datetime=`date +"%Y-%m-%d/%H:%M:%S"`   #获取当前时间

mysql_slave_logfile=/home/logs/check_mysql_slave.log   #日志文件路径,必须提前创建好

slave_ip=`ifconfig $ip|grep "inet addr" | awk -F[:" "]+ ''{print $4}''`

status=$($mysql_binfile -u$mysql_user -p$mysql_pass -S $mysql_sockfile -e "show slave status\G" | grep -i "running")

Slave_IO_Running=`echo $status | grep Slave_IO_Running | awk '' {print $2}''`

Slave_SQL_Running=`echo $status | grep Slave_SQL_Running | awk ''{print $2}''`

if [ "$Slave_IO_Running" = "Yes" -a "$Slave_SQL_Running" = "Yes" ]

then echo "Slave is Running!"

else

echo " $datetime $slave_ip Slave is not running!" >> $mysql_slave_logfile

$mysql_binfile -u$mysql_user -p$mysql_pass -S $mysql_sockfile -e "SLAVE STOP;"

$mysql_binfile -u$mysql_user -p$mysql_pass -S $mysql_sockfile -e "SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;"

$mysql_binfile -u$mysql_user -p$mysql_pass -S $mysql_sockfile -e "SLAVE START;"

$mysql_binfile -u$mysql_user -p$mysql_pass -S $mysql_sockfile -e "EXIT"

fi

:wq!  #保存退出

chmod +x /home/crontab/check_mysql_slave.sh  #添加脚本执行权限

2、添加任务计划,修改/etc/crontab

vi /etc/crontab #在最后一行添加

*/10 * * * * root /home/crontab/check_mysql_slave.sh  #表示每10分钟执行一次

:wq!  #保存退出

3、重新启动crond使设置生效

/etc/rc.d/init.d/crond restart   #yum install -y vixie-cron安装计划任务,某些系统上可能没有预装

chkconfig crond on #设为开机启动

service crond start #启动

可以根据日志文件/home/logs/check_mysql_slave.log查看MySQL主从同步状态

至此,Linux下MySQL主从同步监控shell脚本完成。

我们今天的关于Linux下MySQL数据库的主从同步复制配置的分享已经告一段落,感谢您的关注,如果您想了解更多关于CentOS7.1下MySQL数据库主从同步、linux mysql 主从复制配置、linuxcentos下mysql数据库的主从复制环境搭建_MySQL、linux下MySQL主从同步监控shell脚本的相关信息,请在本站查询。

本文标签: