来自:http://blog.chinaunix.net/uid-25266990-id-3239588.html
Mysql主从方案介绍
mysql主从方案主要作用:
读写分离,使数据库能支撑更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。
发扬不同表引擎的优点。目前Myisam表的查询速度比innodb略快,而写入并发innodb比myIsam要好。那么,我们可以使用innodb作为master,处理高并发写入,使用master作为slave,接受查询。或在myisam slave中建立全文索引,解决innodb无全文索引的弱点。
热备,slave和master的数据“准实时”同步。
准备工作。先分别安装两台MYSQL。
系统环境:
OS:RHEL5.4
主:192.168.10.197
从:192.168.10.198
1、mysql 的安装这里就不介绍了,详见安装文档。
2、my.cnf配置
a、配置MASTER
点击(此处)折叠或打开
- [client]
- port = 3306
- socket = /tmp/mysql.sock
- [mysqld]
- port = 3306
- socket = /tmp/mysql.sock
- basedir=/usr/local/mysql
- datadir=/home/mysqldata
- log-slow-queries=slow_query.txt
- log-bin=mysql-bin197
- long_query_time=2
- skip-locking
- skip-name-resolve
- skip-innodb
- bind-address=192.168.10.197
- max_allowed_packet = 256M
- query_cache_size=256M
- max_connections=2000
- max_connect_errors=10000
- key_buffer_size=6000M
- read_buffer_size=32M
- read_rnd_buffer_size = 32M
- myisam_sort_buffer_size=256M
- tmp_table_size=512M
- old-passwords
- interactive_timeout=60
- wait_timeout=60
- connect_timeout=120
- table_cache=8192
- thread_cache_size=256
- sort_buffer_size=64M
- back_log = 500
- thread_concurrency=32
- server-id=1
- log-bin=mysql-bin240
- binlog-do-db=phpcmsv9
- binlog-ignore-db=mysql
- expire_logs_days=10
- [mysqldump]
- quick
- max_allowed_packet = 1024M
- [mysql]
- no-auto-rehash
- [isamchk]
- key_buffer = 1024M
- sort_buffer_size = 32M
- read_buffer = 2M
- write_buffer = 2M
- [myisamchk]
- key_buffer = 1024M
- sort_buffer_size = 32M
- read_buffer = 2M
- write_buffer = 2M
- [mysqlhotcopy]
- interactive-timeout
注释:红色是修改的部分。
其中,作为主机,server-id必须为1.
binlog_do_db为需要复制的db。 binlog_ignore_db为忽略复制的db。需要增加DB的话,就增加相应的一行。
重启master数据库,运行检查:
点击(此处)折叠或打开
- mysql> show master status; #检查是否以master形式启动了。
- +---------------------+----------+--------------+------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
- +---------------------+----------+--------------+------------------+
- | mysql-bin240.000001 | 2342775 | phpcmsv9 | mysql |
- +---------------------+----------+--------------+------------------+
- 1 row in set (0.00 sec)
- mysql> show variables like "%log%";
#需要看到这样的一行,说明binlog已经开启了: log_bin | ON
在master上为slave建立用户
点击(此处)折叠或打开
- mysql> grant replication slave, reload, super on *.* to 'backup'@'192.168.10.198' identified by '123';
b、slave配置
点击(此处)折叠或打开
- [client]
- port = 3306
- socket = /tmp/mysql.sock
- [mysqld]
- port = 3306
- socket = /tmp/mysql.sock
- basedir=/usr/local/mysql
- datadir=/home/mysqldata
- log-slow-queries=slow_query.txt
- log-bin=mysql-bin198
- long_query_time=2
- skip-locking
- bind-address=192.168.10.198
- skip-name-resolve
- skip-innodb
- max_allowed_packet = 256M
- query_cache_size=256M
- max_connections=2000
- max_connect_errors=10000
- key_buffer_size=6000M
- read_buffer_size=32M
- read_rnd_buffer_size = 32M
- myisam_sort_buffer_size=256M
- tmp_table_size=512M
- old-passwords
- interactive_timeout=60
- wait_timeout=60
- connect_timeout=120
- table_cache=8192
- thread_cache_size=256
- sort_buffer_size=64M
- back_log = 500
- thread_concurrency=8
- server-id=2
- master-host=192.168.10.197
- master-user=backup
- master-password=123
- master-port=3306
- replicate-do-db=phpcmsv9
- replicate-ignore-db=mysql
- master-connect-retry=60
- expire_logs_days=10
- [mysqldump]
- quick
- max_allowed_packet = 1024M
- [mysql]
- no-auto-rehash
- [isamchk]
- key_buffer = 1024M
- sort_buffer_size = 32M
- read_buffer = 2M
- write_buffer = 2M
- [myisamchk]
- key_buffer = 1024M
- sort_buffer_size = 32M
- read_buffer = 2M
- write_buffer = 2M
- [mysqlhotcopy]
- interactive-timeout
注释:红色部分为修改的地方
1.启动主服务器和从服务器服务,在从服务器192.168.17.2上使用命令slave start启动复制;
2.随便使用命令show slave status;
如果出现主从复制报错了
点击(此处)折叠或打开
- mysql> show slave status \G;
- *************************** 1. row ***************************
- Slave_IO_State: Connecting to master
- Master_Host: 192.168.10.197
- Master_User: backup
- Master_Port: 3306
- Connect_Retry: 60
- Master_Log_File: mysql-bin240.000001
- Read_Master_Log_Pos: 2342431
- Relay_Log_File: localhost-relay-bin.000001
- Relay_Log_Pos: 4
- Relay_Master_Log_File: mysql-bin240.000001
- Slave_IO_Running: No
- Slave_SQL_Running: Yes
- Replicate_Do_DB: phpcmsv9
- Replicate_Ignore_DB: mysql
- 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: 2342431
- Relay_Log_Space: 106
- 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: NULL
- Master_SSL_Verify_Server_Cert: No
- Last_IO_Errno: 1130
- Last_IO_Error: error connecting to master 'backup@192.168.10.197:3306' - retry-time: 60 retries: 86400
- Last_SQL_Errno: 0
- Last_SQL_Error:
- 1 row in set (0.00 sec)
- ERROR:
- No query specified
这是由于MASTER没有赋予权限的关系
3在从服务器192.168.17.2运行slave stop;停止复制命令
4输入
点击(此处)折叠或打开
- mysql>CHANGE MASTER to MASTER_HOST='192.168.15.197', MASTER_PORT=3306, MASTER_USER='backup', MASTER_PASSWORD='123', MASTER_LOG_FILE=’mysql-bin240.000001';, MASTER_LOG_POS=2342775;
5然后重新启动slave start 命令后
点击(此处)折叠或打开
- mysql> show slave status \G;
- *************************** 1. row ***************************
- Slave_IO_State: Waiting for master to send event
- Master_Host: 192.168.10.197
- Master_User: backup
- Master_Port: 3306
- Connect_Retry: 60
- Master_Log_File: mysql-bin240.000001
- Read_Master_Log_Pos: 2342775
- Relay_Log_File: localhost-relay-bin.000002
- Relay_Log_Pos: 598
- Relay_Master_Log_File: mysql-bin240.000001
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
- Replicate_Do_DB: phpcmsv9
- Replicate_Ignore_DB: mysql
- 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: 2342775
- Relay_Log_Space: 757
- 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:
- 1 row in set (0.00 sec)
- ERROR:
- No query specified
在从库192.168.17.2 select查询,发现后面插入的两条语句已经同步过来了,随后继续插入测试没有发现问题。
相关推荐
作者:高鹏(网名八怪),《深入理解MySQL主从原理32讲》系列文的作者。2008年开始至今一直从事Oracle/MySQL相关工作,现任易极付高级DBA,Oracle Ocm。有丰富的数据库性能调优,故障诊断经验,并且对MySQL源码有...
keepalived是一款高可用性解决方案,可以实现虚拟IP的管理和服务监控,在mysql主从复制环境中使用keepalived可以实现自动切换,提高系统的可用性和可靠性。 Keepsalived概述 keepalived是一款开源的高可用性解决...
在本讲中,我们将深入探讨如何使用SpringBoot与MySQL实现主从复制以及读写分离的架构设计。这一技术方案在大型分布式系统中尤为常见,它能够有效地提高数据库系统的可用性和性能。 首先,让我们理解主从复制的核心...
### MySQL主从安装部署知识点详解 #### 一、MySQL主从安装部署概述 MySQL 主从复制是一种常见的数据备份和负载均衡技术,在多个服务器之间同步数据。通过设置一个或多个从服务器来复制主服务器上的数据变更操作,...
MySQL 的主从复制机制可以实现数据的自动同步,有助于提高数据的可靠性和读取性能。以下是详细的配置步骤: 1. **主库配置**: - 编辑主库的 `my.ini` 文件,在 `[mysqld]` 段落下添加以下内容: ``` [mysqld] ...
淘宝资深工程师丁奇在2009年的分享中详细介绍了MySQL主从同步的原理、配置、优化以及在实际应用中遇到的问题和解决方案。 首先,MySQL主从同步的基本概念指的是在一个数据库实例(主库)上对数据进行修改操作后,...
下面我们将深入探讨MySQL主从数据库配置的两大核心优势——实现服务器负载均衡和通过复制实现数据的异地备份。 **一、实现服务器负载均衡** 在MySQL主从架构中,负载均衡是通过在主服务器和从服务器之间分配工作...
MySQL 主从复制是指将一个 MySQL 服务器的数据实时同步到另一个 MySQL 服务器中,以实现数据的高可用性和读写分离。下面是 MySQL 主从复制与读写分离的详细知识点: MySQL 主从复制 MySQL 主从复制是指将一个 ...
### MySQL主从复制搭建知识点详解 #### 一、MySQL主从复制概述 MySQL主从复制是一种数据同步机制,它能够将一个MySQL服务器(主服务器)的数据自动同步到一个或多个MySQL服务器(从服务器)。这种机制不仅可以提高...
MySQL 主从同步配置过程 一、 MySQL 主从同步配置概述 ...MySQL 主从同步配置是实现数据高可用性和灾难恢复的重要手段。通过配置主从服务器和同步进程,可以实现数据的实时同步,提高系统的整体性能和安全性。
MySQL主从复制是一种数据复制技术,它能够实现在多个服务器之间复制数据。通常包括一个主服务器(Master)和一个或多个从服务器(Slave)。在主从复制模式中,所有写操作都在主服务器上进行,而读操作则可以在从...
MySQL主从复制模式是数据库领域内一种重要的数据同步机制,它能够让一台主数据库服务器(master)的数据实时复制到一个或多个从数据库服务器(slave)上。这种机制在数据库的高可用性、数据备份、读写分离以及负载...
为了提高数据库系统的可靠性和响应速度,许多企业会采用MySQL主从互备(Master-Slave Mutual Backup)方案。这种架构不仅可以实现实时的数据备份,还能在主服务器出现故障时迅速切换至备用服务器,从而减少服务中断...
MySQL主从数据库配置是数据库高可用性和负载均衡的重要实践,它允许数据从一个主数据库(Master)异步复制到一个或多个从数据库(Slave)。这种配置对于处理大规模数据操作和保证数据一致性至关重要。 主从复制的...