-
数据库类分类的最新文章
-
热评好文
-
最新评论
-
枫叶的春天:上面地址为内网地址,抱歉抱歉 https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.0.28/zabbix-3.0.28.tar.gz/download
-
目录
-
数据库损坏了(业务不能使用数据库)
原因:
解决方案:
复制是MySQL的一项功能,允许服务器将更改从一个实例复制到另一个实例。
异步复制过程
总体来说,复制有3个步骤:
两台主机安装mysql 5.6
注意在两台主机的配置文件中/etc/my.cnf中需要添加server-id=
参数。
创建复制用户
grant replication slave on *.* to repl@'10.0.0.%' identified by '123';
初始化从库
[root@db01 ~]# mysqldump -uroot -poldboy123 -A -F > /tmp/server.sql
[root@db01 ~]# scp /tmp/server.sql 10.0.0.8:/tmp
在从库中source执行
开启主从复制
mysql> mysql> show master;
+----------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------+----------+--------------+------------------+-------------------+
| log-bin.000013 | 120 | | | |
+----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> change master to
master_host='10.0.0.51',
master_port=3306,
master_user='repl',
master_password='123',
master_log_file='log-bin.000013',
master_log_pos=120;
注意:也可以设置relay-bin的名称。
检查状态
start slave;
show slave status\G
成功的标志是:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.0.0.51
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: log-bin.000014
Read_Master_Log_Pos: 120
Relay_Log_File: web01-relay-bin.000002
Relay_Log_Pos: 281
Relay_Master_Log_File: log-bin.000014
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: 120
Relay_Log_Space: 454
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: d4519488-d005-11e7-a4ac-000c2924dc94
Master_Info_File: /application/mysql-5.6.38-linux-glibc2.12-x86_64/data/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
1 row in set (0.00 sec)
Slave_*_Running:
主服务器日志坐标:
中继日志坐标:
Last_IO_Error、Last_SQL_Error:
+分别导致I/O 线程或SQL 线程停止的最新错误的错误消息。在正常复制过程中,这些字段是空的。如果发生错误并导致消息显示在以上任一字段中,则错误值也显示在错误日志中。
Last_IO_Errno、Last_SQL_Errno:
从库binlog落后于主库
Master_Log_File: log-bin.000014
Read_Master_Log_Pos: 120
从库的logbin比主库的logbin慢的原因:
【扩展】
延时节点概念:是SQL线程延时,不是IO线程延时。
解决方法:
stop slave;
set global sql_slave_skip_counter = 1;
start slave;
也可以在配置文件中跳过错误号码:
[mysqld]
slave-skip-errors = 1032,1062,1007
stop slave; #<==临时停止同步开关。
set global sql_slave_skip_counter= 1 ; #<==将同步指针向下移动一个,如果多次不同步,可以重复操作。
start slave;
/etc/my.cnf
slave-skip-errors = 1032,1062,1007
备份
问题:
如果从库只是作为备份服务器使用,那么主库的压力会增加,因为所有的业务都在主库进行读写(dump线程读取并发送给binlog)
解决方法:
性能
类似于一主一从的部署
不同之处在于主从之间多了一个中间服务器
[mysqld]
basedir = /application/mysql/
datadir = /application/mysql/data/
socket = /application/mysql/tmp/mysql.sock
character_set_server=utf8
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
server-id = 2
log-bin=/tmp/log-bin
binlog-format=row
autocommit=1
log-slave-updates
[client]
socket = /application/mysql/tmp/mysql.sock
在中间服务器的my.cnf文件中需要开启binlog并添加log-slave-updates
参数,表示强制刷新binlog,否则binlog日志不会刷新。
相当于做了两套主从。
reset slave;
重置slave(关闭状态)
复制延时是在SQL线程的层面进行控制,不允许SQL线程实时的执行relay log中的操作。
stop slave;
change master to master_delay = 30; #单位是秒
start slave;
结果:
```shell
mysql> show slave status\G
SQL_Delay: 30
SQL_Remaining_Delay: NULL
生产场景中一般延时3-6小时
部署:
1、加载插件
主:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
从:
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
2、查看是否加载成功:
show plugins;
3、启动:
主:
SET GLOBAL rpl_semi_sync_master_enabled = 1;
从:
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
只是临时启动,需要写入配置文件中。
4、重启从库上的IO线程
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;
5、查看是否在运行
主:
show status like 'Rpl_semi_sync_master_status';
从:
show status like 'Rpl_semi_sync_slave_status';
MHA设计理念:
主服务器宕掉了,但是多台从服务器的数据和主服务器同步不完整,这时就需要整合多台从服务器中的同步的数据到新的主服务器中,尽量保证数据的完整性。
中继日志(relay log):记录了events和position号
在执行的事务中打上一个唯一标签,这样就可以保证事务之间的连续性及唯一性
为了failover出现的更好的复制,5.6出现,5.7完善
GTID(Global Transaction ID)是对于一个已提交事务的编号,并且是一个全局唯一的编号。
它的官方定义如下:
GTID = source_id :transaction_id
7E11FA47-31CA-19E1-9E56-C43AA21293967:29
[root@web01 ~]# cat /application/mysql/data/auto.cnf
[auto]
server-uuid=0b920fba-d0fa-11e7-aae4-000c292741de
注意:如果是克隆的mysql数据库,那么server-uuid相同会导致slave-IO无法启动,需要修改server-uuid
1、修改配置文件
主:
[mysqld]
log_bin = /tmp/log-bin
binlog-format = row
basedir = /application/mysql/
datadir = /application/mysql/data
socket = /application/mysql/tmp/mysql.sock
server_id = 1
gtid-mode = on #启用gtid类型,否则就是普通的复制架构
enforce-gtid-consistency = true #强制GTID的一致性
log-slave-updates = 1 #slave更新是否记入日志
autocommit = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
character_set_server=utf8
[client]
socket = /application/mysql/tmp/mysql.sock
从:
[mysqld]
log_bin = /tmp/log-bin
binlog-format=ROW
basedir = /application/mysql/
datadir = /application/mysql/data/
server_id = 2
socket = /application/mysql/tmp/mysql.sock
gtid-mode = on
enforce-gtid-consistency = true
log_slave_updates = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
character_set_server=utf8
autocommit = 1
[client]
socket = /application/mysql/tmp/mysql.sock
注意:如果是新建的数据库可以不需要从库初始化;如果不是需要从库初始化,同步主从的结构属性
2、在主服务器添加复制用户
grant replication slave on *.* to repl@'10.0.0.%' identified by '123';
3、在从服务器上设置change master
mysql> change master to
master_host='10.0.0.51',
master_port=3306,
master_user='repl',
master_password='123',
master_auto_position=1;
4、开启slave
start slave;
5、查看效果
在主库中添加一个数据,查看master
mysql> show master status;
+----------------+----------+--------------+------------------+------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------+----------+--------------+------------------+------------------------------------------+
| log-bin.000003 | 552 | | | ff185ff4-cec5-11e7-9c86-000c2924dc94:1-2 |
+----------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)
再从库中查看slave:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.0.0.51
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: log-bin.000003
Read_Master_Log_Pos: 552
Relay_Log_File: db02-relay-bin.000004
Relay_Log_Pos: 442
Relay_Master_Log_File: log-bin.000003
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: 552
Relay_Log_Space: 1252
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: ff185ff4-cec5-11e7-9c86-000c2924dc94
Master_Info_File: /application/mysql-5.6.38/data/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: ff185ff4-cec5-11e7-9c86-000c2924dc94:1-2
Executed_Gtid_Set: ff185ff4-cec5-11e7-9c86-000c2924dc94:1-2
Auto_Position: 1
1 row in set (0.00 sec)
赞赏
0人进行了赞赏支持
0
收藏
Ctrl+Enter 发布
发布
取消