标签 slave 下的文章

MySQL主从服务器配置

主服务器 IP:192.168.1.138

从服务器IP:192.168.1.137

1、打开主服务器的mysql 配置文件

2、找到[mysqld]节点,添加或修改成以下内容。

server-id=1 #服务器ID
log-bin=mysql-bin01
binlog-do-db=leonis #这里设置需要在主服务器记录日志的数据库,只有在这里设置了的数据库才能被复制到从服务器
binlog-ignore-db=mysql #这里设置在主服务器上不记度日志的数据库
expire_logs_days=10

3、进入主服务器的mysql控制台,执行 FLUSH TABLES WITH READ LOCK;锁定现有数据库,再执行show master status;记录File和Position项目的值.

952334

4、执行 SHOW VARIABLES LIKE “%log_bin%”;  查看主服务器的binlog是否开启。 log_bin 这项 为 ON 的话就表示已开启。

936136

 

然后把数据库的锁定打开 UNLOCK TABLES;

5、在主服务器上创建从服务器使用的帐号并给予相应的权限(主要是replication slave权限),为避免配置过程中出现问题,可以也给予 reload,super权限,配好后再跟据实际情况取消。

grant replication slave, reload, super on *.* to ‘backup’@’192.168.0.1’ identified by ‘123456’; #backup是用户名,123456是密码

6、至此主服务器已设置完成。

7、接下来打开从服务器的mysql配置文件。在[mysqld]节点下,添加或修改成。

server-id=2
log-bin=mysql-bin02
replicate-do-db=leonis
replicate-ignore-db=mysql
expire_logs_days=10

#下面的配置只在mysql 5.1.7 之前的版本才有效。

master-host=192.168.1.138
master-user=root
master-password=leonis
master-port=3306

8、如果你是mysql 5.1.7之后版本的话,要进入从服务器的mysql控制台,使用命令设置。

change master to
master_host=‘192.168.1.138′,
master_user=’root’,
master_password=‘leonis’,
master_log_file=’mysql-bin01.000008′,  #此处填写主服务器的日志文件名,文章上方主服务状态信息中的File的值,上面已用红色强调。
master_log_pos=197; #此处填写主服务器日志文件记录的位置,文章上方主服务状态信息中的Position的值,上面已用红色强调。

9、执行上面命令后,再执行start slave,用启动从服务器模式。

10、可以使用 show processlist 查看进程,进程状态如和下方内容一样的话,说明从服务器运行正常,已经连接上主服务器,开始接受并执行日志。

127859

11、然后最好重启一下从服务器的MySQL。

12、在从服务器的MySQL控制台,使用show slave status; 命令,查看从服务器的运行状态。显示结果中以下两项都为Yes的话,那说明正常。

  1. Slave_IO_Running: Yes
  2. Slave_SQL_Running: Yes

13、在主服务器上leonis数据库创建表,写入数据,然后到从服务器上查看leonis数据库有没有进行同步。

Slave_SQL_Running: No mysql同步故障解决方法

Slave_SQL_Running: No mysql同步故障解决

     今天检查数据库发现一台MySQL Slave未和主机同步,查看Slave状态:
mysql> show slave statusG
Slave_IO_Running: Yes
Slave_SQL_Running: No
Last_Errno: 1062
….
Seconds_Behind_Master:NULL
原因:
1.程序可能在slave上进行了写操作
2.也可能是slave机器重起后,事务回滚造成的.
解决办法I:
1.首先停掉Slave服务:slave stop
2.到主服务器上查看主机状态:
记录File和Position对应的值。
mysql> show master status;
+——————+———–+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———–+————–+——————+
| mysql-bin.000020 | 135617781 | | |
+——————+———–+————–+——————+
1 row in set (0.00 sec)
3.到slave服务器上执行手动同步:
mysql> change master to
> master_host=’master_ip’,
> master_user=’user’,
> master_password=’pwd’,
> master_port=3307,
> master_log_file=’mysql-bin.000020′,
> master_log_pos=135617781;
1 row in set (0.00 sec)
mysql> slave start;
1 row in set (0.00 sec)
再次查看slave状态发现:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

Seconds_Behind_Master: 0
解决办法II:
mysql> slave stop;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> slave start;
自己的使用体会:方法一是强制性从某一个点开始同步,会有部分没有同步的数据丢失,后续主服务器上删除记录同步也会有一些错误信息,不会影响使用.方法二不一定会有效果.
=======================================================================================]
1,主从不能同步:
show slave status;报错:Error xxx dosn’t exist
且show slave statusG:
Slave_SQL_Running: NO
Seconds_Behind_Master: NULL
解决方法:
stop slave;
set global sql_slave_skip_counter =1 ;
start slave;
之后Slave会和Master去同步 主要看:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master是否为0,0就是已经同步了
2,还需要做的一些优化与监视:
show full processlist; //查看mysql当前同步线程号
skip-name-resolve       //跳过dns名称查询,有助于加快连接及同步的速度
max_connections=1000    //增大Mysql的连接数目,(默认100)
max_connect_errors=100 //增大Mysql的错误连接数目,(默认10)
查看日志一些命令
1,  show master statusG;
在这里主要是看log-bin的文件是否相同。
show slave statusG;
在这里主要是看:
Slave_IO_Running=Yes
Slave_SQL_Running=Yes
如果都是Yes,则说明配置成功.
2,在master上输入show processlistG;
mysql> SHOW PROCESSLISTG
*************************** 1. row ***************************
Id: 2
User: root
Host: localhost:32931
db: NULL
Command: Binlog Dump
Time: 94
State: Has sent all binlog to slave; waiting for binlog to
be updated
Info: NULL
   如果出现Command: Binlog Dump,则说明配置成功.
stop slave    #停止同步
start slave    #开始同步,从日志终止的位置开始更新。
SET SQL_LOG_BIN=0|1  #主机端运行,需要super权限,用来开停日志,随意开停,会造成主机从机数据不一致,造成错误
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=n  # 客户端运行,用来跳过几个事件,只有当同步进程出现错误而停止的时候才可以执行。
RESET MASTER  #主机端运行,清除所有的日志,这条命令就是原来的FLUSH MASTER
RESET SLAVE   #从机运行,清除日志同步位置标志,并重新生成master.info
虽然重新生成了master.info,但是并不起用,最好,将从机的mysql进程重启一下,
LOAD TABLE tblname FROM MASTER #从机运行,从主机端重读指定的表的数据,每次只能读取一个,受timeout时间限制,需要调整timeout时间。执行这个命令需要同步账号有 reload和super权限。以及对相应的库有select权限。如果表比较大,要增加net_read_timeout 和 net_write_timeout的值
LOAD DATA FROM MASTER  #从机执行,从主机端重新读入所有的数据。执行这个命令需要同步账号有reload和super权限。以及对相应的库有select权限。如果表比较大,要增加net_read_timeout 和 net_write_timeout的值
CHANGE MASTER TO master_def_list  #在线改变一些主机设置,多个用逗号间隔,比如
CHANGE MASTER TO
MASTER_HOST=’master2.mycompany.com’,
MASTER_USER=’replication’,
MASTER_PASSWORD=’bigs3cret’
MASTER_POS_WAIT() #从机运行
SHOW MASTER STATUS #主机运行,看日志导出信息
SHOW SLAVE HOSTS #主机运行,看连入的从机的情况。
SHOW SLAVE STATUS (slave)
SHOW MASTER LOGS (master)
SHOW BINLOG EVENTS [ IN ‘logname’ ] [ FROM pos ] [ LIMIT [offset,] rows ]
PURGE [MASTER] LOGS TO ‘logname’ ; PURGE [MASTER] LOGS BEFORE ‘date’