mysql服务器管理_MySQL服务器的管理与维护

MySQL服务器的管理与维护

1、监控复制

1)、查看主服务器状态:SHOW

MASTER STATUS

mysql> show master status;

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

| File

| Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| master-bin.000011 |

106 |

|

|

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

1 row in set (0.04 sec)

2)、显示二进制日志中的事件:SHOW

BINLOG EVENTS

SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT

[offset,] row_count]

如果不指定'log_name',则显示第一个二进制日志。

FROM pos:从哪个位置开始

LIMIT [offset,] row_count:显示显示条目,用法同SELECT语句

例:第一个二进制日志,从第十个条目起,取3条目

mysql> show binlog events limit 10,3;

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

| Log_name

| Pos |

Event_type | Server_id | End_log_pos | Info

|

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

| master-bin.000001 | 9264 | Query

|

1 |

9615 | use `mysql`; CREATE TABLE IF NOT EXISTS help_category (

help_category_id smallint unsigned not null, name char(64) not null,

parent_category_id smallint unsigned null, url text not null,

primary key (help_category_id), unique index (name) ) engine=MyISAM

CHARACTER SET utf8 comment='help categories' |

| master-bin.000001 | 9615 | Query

|

1 |

9957 | use `mysql`; CREATE TABLE IF NOT EXISTS help_relation (

help_topic_id int unsigned not null references help_topic,

help_keyword_id int unsigned not null

references help_keyword, primary key (help_keyword_id,

help_topic_id) ) engine=MyISAM CHARACTER SET utf8

comment='keyword-topic relation'

|

| master-bin.000001 | 9957 | Query

|

1 |

10238 | use `mysql`; CREATE TABLE IF NOT EXISTS help_keyword

(

help_keyword_id int unsigned not null,

name char(64) not null, primary key (help_keyword_id), unique index

(name) ) engine=MyISAM CHARACTER SET utf8 comment='help

keywords'

|

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

3 rows in set (0.00 sec)

例:查看master-bin.000010,从第5条起,取3条目

mysql> show binlog events in 'master-bin.000010' LIMIT

5,3;

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

| Log_name

| Pos | Event_type | Server_id | End_log_pos | Info

|

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

| master-bin.000010 | 550 | Xid

|

1 |

577 | COMMIT |

| master-bin.000010 | 577 | Query

|

1 |

648 | BEGIN

|

| master-bin.000010 | 648 | Intvar

|

1 |

676 | INSERT_ID=2

|

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

3 rows in set (0.00 sec)

例:从位置1582开始查看master-bin.000010记录的event

mysql> show binlog events in 'master-bin.000010' from

1582;

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

| Log_name

| Pos |

Event_type | Server_id | End_log_pos | Info

|

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

| master-bin.000010 | 1582 | Query

|

1 |

1713 | use `ibdatax`; insert into tb_emp

value('3','Kin','Man','35','FS','kin@126.com') |

| master-bin.000010 | 1713 | Xid

|

1 |

1740 | COMMIT

|

| master-bin.000010 | 1740 | Stop

|

1 |

1759 |

|

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

3 rows in set (0.00 sec)

例:从位置1582开始查看master-bin.000010记录的event,取2个条目

mysql> show binlog events in 'master-bin.000010' from

1582 limit 2;

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

| Log_name

| Pos |

Event_type | Server_id | End_log_pos | Info

|

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

| master-bin.000010 | 1582 | Query

|

1 |

1713 | use `ibdatax`; insert into tb_emp

value('3','Kin','Man','35','FS','kin@126.com') |

| master-bin.000010 | 1713 | Xid

|

1 |

1740 | COMMIT

|

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

2 rows in set (0.00 sec)

3)、查看服务器二进制日志文件:

SHOW BINARY

LOGS

SHOW MASTER

LOGS

常用于确定确定哪些日志可以被清除(PURGE BINARY LOGS)。

mysql> show binary logs;

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

| Log_name

| File_size |

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

| master-bin.000001 |

19742 |

| master-bin.000002 |

765307 |

| master-bin.000003 |

764 |

| master-bin.000004 |

599 |

| master-bin.000005 |

10270 |

| master-bin.000006 |

125 |

| master-bin.000007 |

596 |

| master-bin.000008 |

367 |

| master-bin.000009 |

2893 |

| master-bin.000010 |

1759 |

| master-bin.000011 |

106 |

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

11 rows in set (0.02 sec)

4)、查看从服务器状态:SHOW

SLAVE STATUS

从服务器状态中,重点监控slave同步状态中的:

Slave_IO_Running、Slave_SQL_Running状态值,如果都为YES,则表示主从同步开启,状态正常。

Seconds_Behind_Master的值,如果为0,则表示主从同步不延时,反之同步延时。

mysql> show slave status\G

*************************** 1. row

***************************

Slave_IO_State: Waiting for master to send event -->指示从服务器的当前状态

Master_Host: 192.168.88.131

Master_User: repluser

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: master-bin.000011

Read_Master_Log_Pos: 106

Relay_Log_File: relay-log.000055

Relay_Log_Pos: 252

Relay_Master_Log_File: master-bin.000011

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: 106

Relay_Log_Space: 18331

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:

1 row in set (0.00 sec)

未同步完成时,read_master_log_pos 始终会大于exec_master_log_pos的值(也有可能相等)

因为一个值是代表I/O线程,一个值代表SQL线程;SQL线程肯定在I/O线程之后;

此外,Seconds_Behind_Master值大于0

5)、查看进程状态:SHOW FULL PROCCESSLIST

必要时可以kill掉某些进程

查看主库进程状态

mysql>

show full processlist;

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

| Id |

User

| Host

| db

| Command

| Time | State

| Info

|

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

| 2

| repluser | 192.168.88.130:45975 | NULL

| Binlog Dump | 678 | Has sent all

binlog to slave; waiting for binlog to be updated |

NULL

|

| 3

| root

| localhost

|

ibdatax | Query

|

0 | NULL

| show full processlist |

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

repluser状态为:Has sent all binlog to slave; waiting

for binlog to be updated

意为二进制日志文件以通过Binlog Dump线程传递给从服务器的I/O线程,等待数据库操作后更新binlog

2 rows in

set (0.00 sec)

查看从库进程状态

mysql>

show full processlist;

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

| Id |

User

| Host

| db |

Command | Time | State

| Info

|

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

| 2

| system user |

| NULL | Connect | 1332 | Waiting for master to send

event

| NULL

|

| 1

| system user |

| NULL | Connect | 248 | Has read all

relay log; waiting for the slave I/O thread to update it |

NULL

|

| 4

| root

| localhost | NULL | Query

|

0 | NULL

| show full processlist |

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

3 rows in

set (0.00 sec)

从服务器system user状态一为:Waiting for master to send

event

意为等待主服务器传递事件,即等待主服务器传递binlog,然后经由I/O线程更新到relay log中;

另一个system user状态为:Has read all relay log; waiting for

the slave I/O thread to update it

意为二进制日志文件relay log中事件已重做完毕,等待I/O线程接收主服务器binlog后更新relay log

2、slave是否发了复制延迟

mysql> SHOW SLAVE STATUS\G查看以下项:

Seconds_Behind_Master: 0

3、确定master/slave节点数据是否一致

(1)表自身的checksum

mysql> help checksum table

(2)使用percona-tools中的pt-table-checksum

4、数据不一致时的修改方法

重复设定复制机制

使用mysqldump从master导出slave不同的数据

参考《mysqldump和mysqlbinlog实现完全备份和增量备份》

https://blog.csdn.net/field_yang/article/details/78641047

5、为从库设定新的主库

参考《mysql主从复制配置实现及其监控与维护》

https://blog.csdn.net/field_yang/article/details/78639405

在从库停止复制线程,而后重新设定CHANGE MASTER TO命令即可;

mysql> stop slave;

Query OK, 0 rows affected (0.10 sec)

mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON

*.* TO 'repluser'@'192.168.%.%'IDENTIFIED BY 'testpass';

mysql> CHANGE MASTER

TOMASTER_HOST='192.168.88.131',MASTER_USER='repluser',MASTER_PASSWORD='testpass',MASTER_LOG_FILE='master-bin.000003',MASTER_LOG_POS=358;

6、跟复制功能相关的文件:

master.info:保存slave连接master时所需要信息;纯文本文件;

relay-log.info:保存了当前slave节点上(主节点上的)二进制日志和当前节点中继日志的对应关系;

[root@test mysql]# cat master.info

15

master-bin.000010

1740

192.168.88.131

repluser

replpass

3306

60

0

0

[root@test mysql]# cat relay-log.info

./relay-log.000046

1886

master-bin.000010

1740

7、清理二进制日志:PURGE命令

实例:

mysql> show binary logs;

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

|Log_name

| File_size

|

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

|master-bin.000001 |

19924

|

|master-bin.000002 |

775387

|

|master-bin.000003 |

387

|

|master-bin.000004 |

527

|

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

4rows in set (0.00 sec)

mysql>purge binary logs to

'master-bin.000002';

QueryOK, 0 rows affected (0.08 sec)

mysql>show binary logs;

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

|Log_name

| File_size

|

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

|master-bin.000002 |

775387

|

|master-bin.000003 |

387

|

|master-bin.000004 |

527

|

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

3rows in set (0.00 sec)

mysql>quit

Bye

[root@testmysql]# ls

ibdata1

master-bin.000002

master-bin.index mysql

relay-log.000006 test

ib_logfile0

master-bin.000003

master.info

mysql.sock

relay-log.index ib_logfile1

master-bin.000004 mydb

relay-log.000005

relay-log.info

[root@test mysql]# catmaster-bin.index

./master-bin.000002

./master-bin.000003

./master-bin.000004

8、提升从服务器为主服务器

主从服务器配置参考《mysql主从复制配置实现及其监控与维护》

https://blog.csdn.net/field_yang/article/details/78639405

1)、计划内提升一个从库为主库:

(1) 停止向老的主库写入数据;

(2) 让计划提升为主库的从库赶上主库;

(3) 提升从库为主库

(4) 修改其它从库的指向

2)、计划外提升一个从库为主库:

(1) 确定哪个从库的数据为最新最全;

Master_Log_File: master1-bin.000002

Read_Master_Log_Pos:245

(2) 等待所有的从库执行从主库那复制而来的生成的中继日志;

(3) 在提升为主库的从库上STOP SLAVE;而后,让各从库指向新的主库;

(4) 再次比较主库和各从库上的两个参数:

Master_Log_File:master1-bin.000002

Read_Master_Log_Pos:245

9、相对理想的主从复制配置:

(1)、master上配置:

sync_binlog=

1

sync_binlog是MySQL的binlog写入方式。它可以设置0以上的值。最安全的设置是1,即写一个binlog,同步一次。确保每次事务提前之前都能将二进制日志同步磁盘上;

对于使用InnoDB存储引擎的场景:

innodb_flush_logs_at_trx_commit=1

控制innodb的redo的刷盘策略,可以设置的值是0,1,2。默认值为1,每次事务提交时MySQL都会把log

buffer的数据写入log

file,并且flush(刷到磁盘)中去.

innodb_support_xa=1

设为ON时,会使用二阶段提交协议来保证binlog和innodb的一致。

(2)、slave上配置:

read_only=

1

从库只读,但是有super权限的依然可以写入

sync_master_info =

1

sync_relay_log =

1

sync_relay_log_info

= 1

设置为1以确保不会丢失信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值