博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql 主从复制安装指南
阅读量:6095 次
发布时间:2019-06-20

本文共 5033 字,大约阅读时间需要 16 分钟。

  hot3.png

Mysql 主从复制安装指南

一,主从伺服器的实现

1,下载相应的软件包:mysql-5.5.34-linux2.6-x86_64.tar.gz进行安装

tar -xvf mysql-5.5.34-linux2.6-x86_64.tar.gz -C /usr/localcd /usr/localln -sv mysql-5.5.34-linux2.6-x86_64 mysqlln mysql/bin/* /usr/bin/cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnfcp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqldchkconfig --add mysqldmysqld --verbose --help

以上步骤在所有的主从伺服器上执行完毕后mysql就安装完毕了。

2,修改主伺服器的my.cnf文件

server-id=1thread_concurrency = 4 #根据伺服器的CPU数量来设置innodb_file_per_table=1 #此项设置为是所有的表成为单个的文件log-bin=mysql-bin.logbinlog-ignore-db=mysqlslave-skip-errors=allsync_binlog=1auto_increment_increment=2auto_increment_offset=1

然后启动mysql service mysqld start

mysql -u root -pmysql> GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO m66@'10.207.238.%' IDENTIFIED BY '123456';mysql> FLUSH PRIVILEGES;

以上命令为建立主从之间复制所用的账户m66密码123456

3,修改从伺服器的my.cnf文件

thread_concurrency = 4 #根据伺服器的CPU数量来设置server-id = 11innodb_file_per_table=1  #此项设置为是所有的表成为单个的文件#log_bin=mysql-binrelay-log=relay-binrelay-log-index=relay-bin-index  #设置中继二进制日志

可以通过命令SHOW GLOBAL VARIABLES LIKE '%relay%';查看中继参数

mysql>flush tables with read lock;#鎖定數據庫為只讀模式mysql>unlock tables;

4,在从伺服器上进入mysql后使用命令

mysql> CHANGE MASTER TOmysql> MASTER_HOST='172.16.1.1',mysql> MASTER_USER='hadoop',mysql> MASTER_PASSWORD='123456';

 设置完后解锁数据库

mysql>unlock tables;

来设置从伺服器与主伺服器间的复制。

5,在从伺服器上使用命令

mysql> START SLAVE; #启动从伺服器mysql> STOP SLAVE;#停止从伺服器mysql> SHOW SLAVE STATUS\G #查看从伺服器的信息

6,对于有大量数据并且需要第一次大量同步是可以使用备份数据库再还原的形式来实现,具体的方法如下

a,停止主数据库的二进制日志mysql> SET SQL_BIN_LOG=0;b,对当前主数据库进行相应的备份mysqldump --all-database --lock-all-tables --master-data=2 > /mnt/slave.sqlc,将备份的文件scp /mnt/slave.sql root@mysql02:/tmp/slave.sqld,停止从伺服器mysql02的slave进程 mysql> STOP SLAVE;e,使用命令在sql模式下 mysql> SOURCE /tmp/slave.sqlf,此时千万不能马上启动SLAVE进程g,head -30 /tmp/slave.sql找到MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=609;h,再在从伺服器上用命令mysql> CHANGE MASTER TOmysql> MASTER_HOST='172.16.1.1',mysql> MASTER_USER='hadoop',mysql> MASTER_PASSWORD='123456',mysql> MASTER_LOG_FILE='mysql-bin.000001',mysql> MASTER_LOG_POS=609;j,上面一切命令执行完成后在START SLAVE;

7,如何从服务器的mysql服务在启动时不要自动启动从服务线程

[mysqld]skip-slave-start=1

二,主从伺服器半同步实现

1,on master

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'smeisync_master.so';mysql> SET GLOBAL rpl_semi_sync_master_enabled=1;mysql> SET GLOBAL rpl_semi_sync_master_timeout=1000;查看semi_sync是否开启命令mysql> SHOW GLOBAL STATUS LIKE 'rpl_semi%';on slavemysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'smeisync_slave.so';mysql> SET GLOBAL rpl_semi_sync_slave_enabled=1;

2,以上关于semi_sync的启用也可以在my.cnf中指定

on master

[mysqld]rpl_semi_sync_master_enabled=1    #设置永久有效rpl_semi_sync_master_timeout=1000 #此处单位为毫秒也就是一秒on slave[mysqld]rpl_semi_sync_slave_enabled=1  #设置永久有效

3,当在SLAVE上设置完毕后需要从启SLAVE线程

  mysql> STOP SLAVE;  mysql> START SLAVE;

4,查看主伺服器上semi_sync是否开启

mysql> SHOW GLOBAL STATUS LIKE 'rpl_semi%';查看从伺服器上semi_sync是否开启mysql> SHOW GLOBAL STATUS LIKE 'rpl_semi%';当主服务器上semi_sync中的clients变为1,证明只从版同步复制链接成功。

5,使用命令

mysql> SHOW PLUGINS;即可查看加载的插件

6,查看semi_rync是否工作可以使用命令

mysql> SHOW STATUS LIKE 'rpl_%';

三,数据复制的过滤

1,binlog-do-db=hadoop #表示之复制hadoop数据库binlog-ignore-db=hadoop    #表示不复制hadoop,其他都复制如果两个选项都存在binlog-do-db生效2,如果binlog-do-db=hadoop  #如果此选项在主服务器上,就表示任何不涉及到hadoop数据库相关的写操作都不会记录到二进制中;因此一般数据库的复制过滤在从服务器上进行。3,从服务器过滤操作replicate_do_db  #相当于白名单relicate_ignore_db #相当于黑名单replicate_do_tablereplicate_ignore_tablereplicate_wild_do_table=hadoop.tb%replicate_wild_ignore_table=hadoop.tb1%从服务器的复制只是将主服务器的所有二进制文件复制过来后,对不进行复制的数据库不执行相应的语句,所以同样会占用带宽。当复制多个数据库时将一个选项使用多次即可  [mysqld]  replicate_do_db=hadoop  replicate_do_db=mysql

四,MySQL - 主从结构.添加新 Slave

复制主库要步骤:

====================

1.将内存中的数据同步到表中.

2.锁定表,不让出现脏数据

3.备份

4.解锁

5.在另一台机器上同步数据,并且设置 master_log_file 和 master-log_pos

命令:

a.同步数据,并锁表: 

mysql> flush tables with read lock;

b.记住当前 binlog 的偏移值,后面设置 slave 上的值. show master status; 记下 file 和 position

c.备份:.参照 http://blog.sina.com.cn/s/blog_5f54f0be0100vp6m.html

命令: 

mysqldump --all-databases --host=10.207.238.66 > backup.sql

d.解锁 

mysql> unlock tables;

e.同步从机.将 backup.sql 复制到从机上

mysql --host=10.207.238.67 < backup.sql

设置从机: 

mysql>change master to master_host = '10.207.238.66',master_port = 3306,master_user = 'm66',master_password='123456',master_log_file='master-bin.000005',master_log_pos=194244;

这里的 master_log_file 和 master_log_pos 就是前面第 2 步中记下来的两个值.

开启从机

start slave;

复制从库要步骤:

====================

可以看到,从主库复制会有段时间锁表,这段时间会影响主库的使用。如果我们能直接从从库进行复制,就不会对主库产生影响了。但是,从从库复制要保证的是复制过程中从库上的数据不会发生变化,所以要先停掉从库。

1.停止从库: mysql> stop slave;

2.看当前从库的状态。和前面的看主库状态一样。但现在是从从库复制,所以查看从库状态:mysql> show slave status;

记下 Relay_Master_Log_file 和 Exec_Master_Log_Pos, 用处和前面一样.

3.备份从库数据.用 mysqldump

4.在新的从库上还原数据

5.设置新从库的 slave 参数.

change master to master_host = '10.207.238.66',master_port = 3306,master_user = 'm66',master_password='root',master_log_file='master-bin.000005',master_log_pos=194244;

可以看到,虽然新从库是从从库复制的数据,但实际上 binlog 的 master 还是指向的主库。

另外,这里将 master_log_file 和 master_log_pos 设置成第 2 步中的 Relay_Master_Log_file 和 Exec_Master_Log_Pos

start slave;

转载于:https://my.oschina.net/ambari/blog/615374

你可能感兴趣的文章
Android实现自定义位置无标题Dialog
查看>>
面试总结
查看>>
Chrome浏览器播放HTML5音频没声音的解决方案
查看>>
easyui datagrid 行编辑功能
查看>>
类,对象与实例变量
查看>>
HDU 2818 (矢量并查集)
查看>>
【转】php字符串加密解密
查看>>
22. linux 常用命令
查看>>
ASP.Net 使用GridView模板删除一行的用法
查看>>
(十六)字段表集合
查看>>
JPGraph
查看>>
实验二 Java面向对象程序设计
查看>>
------__________________________9余数定理-__________ 1163______________
查看>>
webapp返回上一页 处理
查看>>
新安装的WAMP中phpmyadmin的密码问题
查看>>
20172303 2017-2018-2 《程序设计与数据结构》第5周学习总结
查看>>
(转)HTML的代码(从朋友那转的,看着觉得会有用就转了)
查看>>
eclipse中将一个项目作为library导入另一个项目中
查看>>
Go语言学习(五)----- 数组
查看>>
Android源码学习之观察者模式应用
查看>>