您的位置:首页 > 数据库 > MySQL

MySQL主从复制

2015-11-11 11:16 609 查看
同步方法:

普通文件的数据同步:

1、NFS网络文件共享

2、Samba共享数据

3、定时任务或守护进程结合rsync,scp

4、inotify(sersync)+ rsync 触发式实时同步

5、ftp数据同步

6、ssh key + scp/rsync

7、svn版本管理

文件系统级别的同步:

1、drbd

2、mysql

数据库自身同步:

1、mysql replication,mysql主从复制

2、oracle dataguard

主从复制方式:

(√) Master>Slave
(√) Master>Slaves
(√) Master>Slave>Slaves
(×)Masters>Slave(Multi-Source)
(!)Master<>Master(Multi-Master)
(!)Ring(Multi-Master)
(√) 分布式 (DBPOROXY)


如何保障数据不丢失:

补全日志(主库可以连接)

双写

通过应用写日志

异步同步改成实时同步

主从复制的应用场景:

主从服务器互为备份

主从服务器读写分离(程序、代理软件、分布式dbproxy)

主从复制原理图:



中继日志:relay-log

slave的IO线程拿到mater的日志后更新:master-info

slave再做其他数据库的主库时需要slave开启bin-log日志和log_slave_update参数

主从复制实施:

##调整参数

[root@mysql 3306]# vi my.cnf
log-bin = /data/3306/mysql-bin

[root@mysql 3306]# mysql -S /data/3306/mysql.sock -uroot -p123456 -e "show variables like 'log_bin%'"
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | ON    |
| log_bin_trust_function_creators | OFF   |
+---------------------------------+-------+

[root@mysql 3307]# egrep "server-id|log-bin" /data/3307/my.cnf
#log-bin = /data/3307/mysql-bin
server-id = 2

--创建主从复制用户
[root@mysql 3307]# mysql -S /data/3306/mysql.sock -uroot -p123456
mysql> grant replication slave on *.* to 'rep'@'10.0.0.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;


##备份导入

--5.1版本 flush tables with read lock ,5.5版本 flush table with read lock
[root@mysql bak]# mysqldump -S /data/3306/mysql.sock -uroot -p123456 --events --master-data=2 -A -B -x|gzip >/opt/bak/rep.sql.gz

[root@mysql bak]# gzip -d *
[root@mysql bak]# more rep.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000019', MASTER_LOG_POS=472;
-- 可备份前使用
[root@mysql bak]# mysql -S /data/3306/mysql.sock -uroot -p123456 -e "show master status"

--参数(秒)interactive_timeout=60 , wait_timeout=60
[root@mysql 3307]# mysql -S /data/3306/mysql.sock -uroot -p123456 -e "show variables like '%timeout%'"
+----------------------------+----------+
| Variable_name              | Value    |
+----------------------------+----------+
| connect_timeout            | 10       |
| delayed_insert_timeout     | 300      |
| innodb_lock_wait_timeout   | 120      |
| innodb_rollback_on_timeout | OFF      |
| interactive_timeout        | 28800    |
| lock_wait_timeout          | 31536000 |
| net_read_timeout           | 30       |
| net_write_timeout          | 60       |
| slave_net_timeout          | 3600     |
| wait_timeout               | 28800    |
+----------------------------+----------+


##启动从库

[root@mysql bak]# mysql -S /data/3307/mysql.sock -uroot -p123456 </opt/bak/rep.sql

/*
CHANGE MASTER TO
MASTER_HOST='10.0.0.12',
MASTER_PORT=3306,
MASTER_USER='rep',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000019',
MASTER_LOG_POS=472;
*/

[root@mysql bak]# mysql -S /data/3307/mysql.sock -uroot -p123456
mysql> CHANGE MASTER TO
-> MASTER_HOST='10.0.0.12',
-> MASTER_PORT=3306,
-> MASTER_USER='rep',
-> MASTER_PASSWORD='123456',
-> MASTER_LOG_FILE='mysql-bin.000019',
-> MASTER_LOG_POS=472;
Query OK, 0 rows affected (0.02 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)


##同步状态信息查看

mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.0.0.12
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000019
Read_Master_Log_Pos: 472
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000019
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: 472
Relay_Log_Space: 403
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
1 row in set (0.00 sec)

--mysql线程读取relay-log的位置点
[root@mysql 3307]# cat relay-log.info
/data/3307/relay-bin.000002
253
mysql-bin.000019
472

--IO线程从master获取bin-log日志的位置点记录
[root@mysql 3307]# cd  data/
[root@mysql data]# cat master.info
18
mysql-bin.000019
472
10.0.0.12
rep
123456
3306
60 --重试
0

0
1800.000

0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql