MySQL5.6主从复制(读写分离)教程

1、MySQL5.6开始主从复制有两种方式:

基于日志(binlog);

基于GTID(全局事务标示符)。

需要注意的是:GTID方式不支持临时表!所以如果你的业务系统要用到临时表的话就不要考虑这种方式了,

至少目前最新版本MySQL5.6.12的GTID复制还是不支持临时表的。

所以本教程主要是告诉大家如何通过日志(binlog)方式做主从复制!

2、MySQL官方提供的MySQL Replication教程:

http://dev.mysql.com/doc/refman/5.6/en/replication.html

第一步:准备工作

主服务器: 192.168.1.100

从服务器: 192.168.1.101

MySQL软件版本:

MySQL-server-advanced-5.6.18-1.el6.x86_64.rpm

MySQL-cient-advanced-5.6.18-1.el6.x86_64.rpm

第二步:在主服务器和从服务器上安装MySQL数据库软件

安装方法,请参见

MySQL5.6.18 for RHEL/OralceLinux 6.5 安装

MySQL数据库软件安装完成后,不要急着做mysql启动操作。建议把mysql初始化生成的/usr/my.cnf

(如果是从源文件编译安装时,路径应该是在/usr/local/mysql/mysql.cnf)删除,然后把优化好的mysql

配置文件my.cnf放到/etc下。

第三步:修改主数据库的配置文件/usr/my.cnf

[mysqld]

server-id=1

log-bin=mysqlmaster-bin.log

sync_binlog=1

innodb_buffer_pool_size=512M

innodb_flush_log_at_trx_commit=1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

lower_case_table_names=1

log_bin_trust_function_creators=1

第四步:修改从数据库配置文件/usr/my.cnf

server-id=2

log-bin=mysqlslave-bin.log

sync_binlog=1

innodb_buffer_pool_size=512M

innodb_flush_log_at_trx_commit=1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

lower_case_table_names=1

log_bin_trust_function_creators=1

第五步:在主数据库和从数据库服务器上分别执行以下命令重新启动主数据库和从数据库

[root@master ~]# service mysql restart

[root@slave ~]# service mysql restart

第六步:在主数据库上创建用于主从复制的账户

[root@master ~]# mysql -uroot -p

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.101' IDENTIFIED BY '111111';

Query OK, 0 rows affected (0.00 sec)

注意:以上命令中的IP地址,是从数据库服务器的IP地址。

第七步:主数据库锁表(禁止再插入数据以获取主数据库的的二进制日志坐标)

mysql> flush tables with read lock;

Query OK, 0 rows affected (0.00 sec)

第八步:查看主数据库的状态(并记录下File字段和Position字段的值,在配置从服务器时有用到)

mysql> show master status;

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

| File                   | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| mysqlmaster-bin.000004 |      327 |              |                  |                   |

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

1 row in set (0.00 sec)

第九步:创建主数据库的快照文件

[root@master ~]# cd /usr/bin/

# ./mysqldump -uroot -p -h127.0.0.1 -P3306 --all-databases --triggers --routines --events >>/mnt/windows/all.sql

上面命令中的红色部分,是一个共享目录,这个目录可以同时被主数据库服务器和从数据库服务器访问到。

如果没有这样的共享目录,可以将all.sql放在其它任何目录下,然后使用scp命令复制到远程从数据库服务器的某个目录中

这条命令的执行时间根据数据量的不同,会有所不同,如果主数据库的数据量很大,可能需要很长时间,那么在这种情况下,就最好在

晚上没有业务的时候进行这个操作,否则第七步中的锁表操作会对业务系统造成很大的影响

第十步:解锁主数据库的锁表操作

[root@master ~]# mysql -uroot -p    (本命令在主数据库服务器上执行)

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

第十一步:在从数据库服务器上导入第七步创建的快照文件到从数据库中

[root@slave ~]# mysql -uroot -p -h127.0.0.1 -P3306 < /mnt/windows/all.sql

第十二步:在从数据库服务器上设置主数据库服务器向从数据库服务器同步

[root@slave ~]# mysql -uroot -p

mysql> change master to master_host = '192.168.1.100',master_user='repl',master_password='111111',master_log_file='mysqlmaster-bin.000004',master_log_pos=327;

注意:红色部分的值,是在第八步中查出来的,这里不能弄错了

第十三步:启动从数据库复制线程

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

Master_User: repl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysqlmaster-bin.000004

Read_Master_Log_Pos: 327

Relay_Log_File: slave-relay-bin.000002

Relay_Log_Pos: 289

Relay_Master_Log_File: mysqlmaster-bin.000004

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

Relay_Log_Space: 462

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: 2e5e1b22-f0a9-11e3-bbac-000c297799e0

Master_Info_File: /var/lib/mysql/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_IO_Running和Slave_SQL_Running两项都为yes,就表示主从复制配置成功了.

下面可以开始测试配置是否成功了,首先在主数据库的test数据库中新建一张表,然后插入几条数据,然后到从数据库看看是否同步过来了。

注意:当从数据库有大量的查询时,可以暂时将从数据库的复制线程关闭掉,等查询量降下来了,再打开,这样也不会丢失数据。

附:一个优化好后的主数据库配置文件和从数据配置文件内容如下:

# For advice on how to change settings please see

# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html

[client]

port=3306

socket=/usr/local/mysql/mysql.sock

default-character-set=utf8

[mysqld]

sync_binlog=1

server-id=1

port=3306

socket=/usr/local/mysql/mysql.sock

pid-file=/home/mysql/temp/my3306.pid

user=mysql

datadir=/home/mysql/data

tmpdir=/home/mysql/temp/

log-bin=/home/mysql/data/mysqlmaster-bin

log-error=/home/mysql/logs/error.log

slow_query_log_file=/home/mysql/logs/slow.log

binlog_format=mixed

slow_query_log

long_query_time=10

wait_timeout=31536000

interactive_timeout=31536000

max_connections=500

max_user_connections=490

max_connect_errors=2

character_set_server=utf8

skip-external-locking

key_buffer_size = 128M

max_allowed_packet = 5M

table_open_cache = 512

sort_buffer_size = 2M

read_buffer_size = 2M

read_rnd_buffer_size = 8M

myisam_sort_buffer_size = 64M

thread_cache_size = 8

query_cache_size = 32M

# Try number of CPU's*2 for thread_concurrency

thread_concurrency = 4

binlog-ignore-db=mysql

binlog-ignore-db=information_schema

replicate_ignore_db=mysql

replicate_ignore_db=information_schema

expire-logs-days=10

skip-slave-start

skip-name-resolve

lower_case_table_names=1

log_bin_trust_function_creators=1

# InnoDB

innodb_data_home_dir=/home/mysql/data

innodb_log_group_home_dir=/home/mysql/logs

innodb_data_file_path=ibdata1:128M:autoextend

innodb_buffer_pool_size=2G

innodb_log_file_size=10M

innodb_log_buffer_size=8M

innodb_lock_wait_timeout=50

innodb_file_per_table

innodb_flush_log_at_trx_commit=1

#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

一个优化好的从数据库的配置文件如下:

# For advice on how to change settings please see

# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html

[client]

port=3306

socket=/usr/local/mysql/mysql.sock

default-character-set=utf8

[mysqld]

sync_binlog=1

server-id=2

port=3306

socket=/usr/local/mysql/mysql.sock

pid-file=/home/mysql/temp/my3306.pid

user=mysql

datadir=/home/mysql/data

tmpdir=/home/mysql/temp/

log-bin=/home/mysql/data/mysqlslave-bin

log-error=/home/mysql/logs/error.log

slow_query_log_file=/home/mysql/logs/slow.log

binlog_format=mixed

slow_query_log

long_query_time=10

wait_timeout=31536000

interactive_timeout=31536000

max_connections=500

max_user_connections=490

max_connect_errors=2

character_set_server=utf8

skip-external-locking

key_buffer_size = 128M

max_allowed_packet = 5M

table_open_cache = 512

sort_buffer_size = 2M

read_buffer_size = 2M

read_rnd_buffer_size = 8M

myisam_sort_buffer_size = 64M

thread_cache_size = 8

query_cache_size = 32M

# Try number of CPU's*2 for thread_concurrency

thread_concurrency = 4

binlog-ignore-db=mysql

binlog-ignore-db=information_schema

replicate_ignore_db=mysql

replicate_ignore_db=information_schema

expire-logs-days=10

#skip-slave-start

skip-name-resolve

lower_case_table_names=1

log_bin_trust_function_creators=1

# InnoDB

innodb_data_home_dir=/home/mysql/data

innodb_log_group_home_dir=/home/mysql/logs

innodb_data_file_path=ibdata1:128M:autoextend

innodb_buffer_pool_size=2G

innodb_log_file_size=10M

innodb_log_buffer_size=8M

innodb_lock_wait_timeout=50

innodb_file_per_table

innodb_flush_log_at_trx_commit=1

#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO

[mysqldump]

quick

max_allowed_packet = 16M

[mysql]

no-auto-rehash

[myisamchk]

key_buffer_size = 256K

sort_buffer_size = 256K

read_buffer = 256K

write_buffer = 256K

[mysqlhotcopy]

interactive-timeout

sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO

[mysqldump]

quick

max_allowed_packet = 16M

[mysql]

no-auto-rehash

[myisamchk]

key_buffer_size = 256K

sort_buffer_size = 256K

read_buffer = 256K

write_buffer = 256K

[mysqlhotcopy]

interactive-timeout

mysql5.6 replication_MySQL5.6 Replication主从复制(读写分离) 配置完整版相关推荐

  1. mysql5.6.37 主从同步_MySQL5.6 Replication主从复制(读写分离) 配置完整版

    1.MySQL5.6开始主从复制有两种方式: 基于日志(binlog): 基于GTID(全局事务标示符). 需要注意的是:GTID方式不支持临时表!所以如果你的业务系统要用到临时表的话就不要考虑这种方 ...

  2. CentoOS7.9搭建mysql5.7分布式集群+主从复制+读写分离知识整理

    一.集群介绍 MySQL的高可用架构无论是社区还是官方,一直在技术上进行探索,这么多年提出了多种解决方案,比如MMM, MHA, NDB Cluster, Galera Cluster, InnoDB ...

  3. win7 mysql读写分离_mysql 主从复制 读写分离配置

    口水:第一次写博客,欢迎大家来拍砖. 最近项目中用mysql主从复制主要是为了实现读写分离.数据库备份.故障转移的需要,采用的是一主一从,配置比较简单. 自已在本机做测试 测试环境如下: OS:win ...

  4. mysql5.6主从复制(读写分离)方案_MySQL5.6主从复制(读写分离)方案

    MySQL5.6主从复制(读写分离)方案 一.前言:为什么MySQL要做主从复制(读写分离)? 通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低. 为了提升业务系统性能, ...

  5. MySQL5.6主从复制(读写分离)方案

    MySQL5.6主从复制(读写分离)方案 https://yq.aliyun.com/articles/24255 摘要: 一.前言:为什么MySQL要做主从复制(读写分离)? 通俗来讲,如果对数据库 ...

  6. mysql5.7 读写分离_mysql5.7的主从复制+读写分离

    Mysql主从复制与读写分离 目录: 1.mysql主从复制工作原理 2.mysql读写分离原理,使用Amoeba中间代理层实现读写分离 3.在vmware中实现mysql主从复制+读写分离 一.My ...

  7. Mysql数据库安装,基本命令,主从复制,读写分离,数据库的冷热备和数据库的还原,慢查询日志打开

    文章目录 1. 安装Mysql数据库 使用二进制安装Mysql数据库 使用yum安装Mysql 2.mysql的常用命令 3.慢查询开启 4.mysql数据库的冷备 5.数据库热备使用Xtraback ...

  8. java读取mysql配置文件_一文读懂 MySQL 主从复制读写分离

    文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary 前言 在很多项目,特别是互联网项目,在使用MySQL时都会采用主从复 ...

  9. MySQL之——MSS主从复制(读写分离)实现

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/52746393 前面,在博文<MySQL之--MS主从复制(读写分离)实现&g ...

最新文章

  1. 【错误记录】360 加固后的运行错误 ( 加固 SO 动态库时不能对第三方动态库进行加固 )
  2. LeetCode Algorithm 700. 二叉搜索树中的搜索
  3. RuoYi-Cloud 部署篇_02(linux环境 Oracle +nginx版本)
  4. java.sql.exception_java.sql.SQLException: 违反协议
  5. Spring容器创建流程(9)完成创建
  6. 我可以获得标记为--assume-unchanged的文件列表吗?
  7. Qt: 监听文件夹QFileSystemWatcher;
  8. shell fork 阻塞进程_张三同学没答好「进程间通信」,被面试官挂了....
  9. 本科毕设完整流程和注意事项
  10. 阿里图标库使用(在线使用)
  11. aotorun专杀工具(U盘病毒专杀)
  12. 【NiosII训练】第二篇、FPGA驱动AD9854高级篇
  13. 《大型网站技术架构》——第一章 大型网站架构演化
  14. html5绘制图形幸运大转盘,微信小程序利用canvas 绘制幸运大转盘功能
  15. 数字中国城市巡礼之南通,公安的“达摩克利斯之剑”
  16. 1.2 嵌入式微处理器体系结构
  17. 第三方apk内置因签名导致SystemUI未启动启动问题案例分析
  18. 最权威的智商测试软件,最权威的智商测试题及答案
  19. 【DDSCAT——离散偶极近似仿真程序10】DDSCAT内置示例运行结果
  20. 金山U盘卫士V1.5 绿色版

热门文章

  1. matlab提excel文字,matlab读取excel文字
  2. mysql 5.5 5.6 主从_mysql5.6+主从集的版本号(mysql5.5主机和从机载带后,5.5在设置有一定的差距)...
  3. Android:安卓APP开发显示一个美女,安卓APP开发显示两个美女
  4. 安卓开发之路-浅识Android
  5. C++打开的文件一定要用close()方法关闭
  6. sklearn.preprocessing.PolynomialFeatures
  7. python写自动答题脚本_问卷星的自动答题脚本
  8. 梯度下降法原理及实现
  9. python库整理:numpy 集合操作
  10. pytorch学习笔记 torchnn.ModuleList