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
主从复制方式:
如何保障数据不丢失:
补全日志(主库可以连接)
双写
通过应用写日志
异步同步改成实时同步
主从复制的应用场景:
主从服务器互为备份
主从服务器读写分离(程序、代理软件、分布式dbproxy)
主从复制原理图:
中继日志:relay-log
slave的IO线程拿到mater的日志后更新:master-info
slave再做其他数据库的主库时需要slave开启bin-log日志和log_slave_update参数
主从复制实施:
普通文件的数据同步:
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中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜
- MySQL 备份与恢复