Home >Database >Mysql Tutorial >mysql M/S配置小记_MySQL

mysql M/S配置小记_MySQL

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-01 13:30:061014browse

bitsCN.com

mysql M/S配置小记

 

昨天做了MYSQL 主从服务器同步配置。今天早上起了个大早,到现在还是睡意朦胧。。。

现在写下整个同步过程及需要注意的地方

目前情况:

1.系统版本都是rhel5 mysql版本相同

2.主服务器正在运行,不能停止。

3.主服务器IP为:10.0.0.2

  从服务器IP为:10.0.0.3

4.从服务器MSYQL slave 为停止状态

配置过程:

1、为了安全起见,建同步账号

mysql> GRANT REPLICATION SLAVE ON *.*   

    -> TO 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';

 

 

本例: GRANT REPLICATION SLAVE ON *.* TO  mysqlms@10.0.0.3  IDENTIFIED BY mysqlslave;

2、锁表

mysql > FLUSH TABLES WITH READ LOCK;

 

注意:为了保证FLUSH TABLES语句让读锁定保持有效。(如果退出客户程序,锁被释放)。建立新的SSH连接,然后对主服务器上的数据进行快 

照。 

3、建立快照 

tar -cvf /tmp/mysql-snapshot.tar ./data

 

数据库大怎么办?用mysqldump导出。

本例:tar -cvf /tmp/mysql-snapshot.tar ./data/newnew  --其中的一个数据库,其它的无关紧要。

4、记下file pos值

当FLUSH TABLES WITH READ LOCK所置读锁定有效时,读取主服务器上当前的二进制日志名(file)和偏移量值(pos):

mysql > SHOW MASTER STATUS; 

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

| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | 

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

| mysql-bin.003 | 73       | test         | manual,mysql     | 

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

File列显示日志名,而Position显示偏移量。在该例子中,二进制日志值为mysql-bin.003,偏移量为73。记录该值。以后设置从服务器时需要

使用这些值。它们表示复制坐标,从服务器应从该点(也可以是任何点)开始从主服务器上进行新的更新。

5、解锁

mysql > UNLOCK TABLES;

这时也可以使用mysql > SHOW MASTER STATUS; 查看pos在不断的变化。

6、配置主从服务器my.cnf 

主 

[mysqld]   

log-bin=mysql-bin   

server-id=1   

 

从   

[mysqld]   

log-bin=mysql-bin   

server-id=2

7、将主服务器快照信息COPY至从服务器,重启从服务器MYSQL,并配置MASTER

# scp /tmp/mysql-snapshot.tar  root@10.0.0.3:/root  

# 在从服务器解压,覆盖data,注意权限 

#从服务器操作 service mysqld restart 

# mysql> CHANGE MASTER TO   

->     MASTER_HOST='master_host_name',   

->     MASTER_USER='replication_user_name',   

->     MASTER_PASSWORD='replication_password',   

->     MASTER_LOG_FILE='recorded_log_file_name',   

->     MASTER_LOG_POS=recorded_log_position;

本例:

# mysql> CHANGE MASTER TO 

->     MASTER_HOST='10.0.0.2', 

->     MASTER_USER='mysqlms', 

->     MASTER_PASSWORD='mysqlslave', 

->     MASTER_LOG_FILE='mysql-bin.003', 

->     MASTER_LOG_POS=73;   

 

----这些信息在主服务器用mysql > SHOW MASTER STATUS;查看得知。

8、验证配置是否正确

登录从服务器输入如下命令:

mysql> show slave status/G

 

会得到类似下面的列表: 

Slave_IO_Running: Yes   

Slave_SQL_Running: Yes

 

9、启动同步

从服务器

mysql> start slave;

 

10、再次验证同步

在主服务器建个表,在从服务器查看是否也有。

 

 

附:

一些错误信息的处理,主从服务器上的命令,及状态信息。

在从服务器上使用show slave status/G

Slave_IO_Running,为No,

则说明IO_THREAD没有启动,请执行start slave io_thread

Slave_SQL_Running为No

则复制出错,查看Last_error字段排除错误后执行start slave sql_thread 

查看Slave_IO_State字段空 //复制没有启动

Connecting to master//没有连接上master

Waiting for master to send event//已经连上

主服务器上的相关命令: 

show master status 

show slave hosts 

show logs 

show binlog events 

purge logs to 'log_name' 

purge logs before 'date' 

reset master(老版本flush master) 

set sql_log_bin=

 

从服务器上的相关命令: 

slave start 

slave stop 

SLAVE STOP IO_THREAD //此线程把master段的日志写到本地 

SLAVE start IO_THREAD 

SLAVE STOP SQL_THREAD //此线程把写到本地的日志应用于数据库 

SLAVE start SQL_THREAD 

reset slave 

SET GLOBAL SQL_SLAVE_SKIP_COUNTER 

load data from master 

show slave status(SUPER,REPLICATION CLIENT) 

CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,MASTER_USER=, MASTER_PASSWORD= //动态改变master信息 

PURGE MASTER [before 'date'] 删除master端已同步过的日志

6.3.1 Master 同步线程状态

以下列出了master的 Binlog Dump 线程 State 字段中最常见的几种状态。如果在master上没有 Binlog Dump 线程,那么同步就没有在运行。

也就是说,没有slave连接上来。

Sending binlog event to slave

事件是由二进制日志构成,一个事件通常由更新语句加上其他信息。线程读取到一个事件并正发送到slave上。

Finished reading one binlog; switching to next binlog

读取完了一个二进制日志,正切换到下一个。

Has sent all binlog to slave; waiting for binlog to be updated

已经读取完全部未完成更新日志,并且全部都发送到slave了。它处于空闲状态,正等待在master上执行新的更新操作以在二进制日志中产生新

的事件,然后读取它们。

Waiting to finalize termination

当前线程停止了,这个时间很短。

 

6.3.2 Slave的I/O线程状态

以下列出了slave的I/O线程 State 字段中最常见的几种状态。从MySQL 4.1.1开始,这个状态在执行 SHOW SLAVE STATUS 语句结果的 

Slave_IO_State 字段也会出现。这意味着可以只执行 SHOW SLAVE STATUS 语句就能了解到更多的信息。

Connecting to master

该线程证尝试连接到master上。

Checking master version

确定连接到master后出现的一个短暂的状态。

Registering slave on master

确定连接到master后出现的一个短暂的状态。

Requesting binlog dump

确定连接到master后出现的一个短暂的状态。该线程向master发送一个请求,告诉它要请求的二进制文件以及开始位置。

Waiting to reconnect after a failed binlog dump request

如果二进制日志转储(binary log dump)请求失败了(由于连接断开),该线程在休眠时进入这个状态,并定期重连。重连的时间间隔由 --

master-connect-retry 选项来指定。

Reconnecting after a failed binlog dump request

该线程正尝试重连到master。

Waiting for master to send event

已经连接到master,正等待它发送二进制日志。如果master闲置时,这个状态可能会持续较长时间,如果它等待超过 slave_read_timeout 秒

,就会发生超时。这时,它就会考虑断开连接,然后尝试重连。

Queueing master event to the relay log

已经读取到一个事件,正把它拷贝到中继日志中以备SQL线程处理。

Waiting to reconnect after a failed master event read

读日志时发生错误(由于连接断开)。该线程在重连之前休眠 master-connect-retry 秒。

Reconnecting after a failed master event read

正尝试重连到master。当连接确定后,状态就变成 Waiting for master to send event。

Waiting for the slave SQL thread to free enough relay log space

relay_log_space_limit 的值非零,中继日志的大小总和超过这个值了。I/O线程等待SQL线程先处理中继日志然后删除它们以释放足够的空间

Waiting for slave mutex on exit

当前线程停止了,这个时间很短。

 

6.3.3 Slave的SQL线程状态

以下列出了slave的SQL线程 State 字段中最常见的几种状态:

Reading event from the relay log

从中继日志里读到一个事件以备执行。

Has read all relay log; waiting for the slave I/O thread to update it

已经处理完中继日志中的全部事件了,正等待I/O线程写入更新的日志。

Waiting for slave mutex on exit

当前线程停止了,这个时间很短。
 

bitsCN.com
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn