MySQL主从服务器的配置与读写分离实现

1.1.          MySQL的Master和Slave配置

MySQL主从同步是目前使用比较广泛的数据库架构,技术比较成熟,配置也不复杂,特别是对于负载比较大的网站,主从同步能够有效缓解数据库读写的压力。

1.1.1.   MySQL主从同步的机制

1. Slave 上面的IO线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;

2. Master 接收到来自 Slave 的 IO 线程的请求后,通过负责复制的 IO线程根据请求信息读取指定日志指定位置之后的日志信息,返回给 Slave 端的 IO线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在 Master 端的 Binary Log 文件的名称以及在 BinaryLog 中的位置;

3. Slave 的 IO 线程接收到信息后,将接收到的日志内容依次写入到 Slave 端的RelayLog文件(MySQL-relay-bin.xxxxxx)的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的高速Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”

4. Slave 的 SQL 线程检测到 Relay Log 中新增加了内容后,会马上解析该 Log 文件中的内容成为在 Master端真实执行时候的那些可执行的 Query 语句,并在自身执行这些 Query。这样,实际上就是在 Master 端和 Slave端执行了同样的 Query,所以两端的数据是完全一样的。

1.1.2.   MySQL主从同步的作用

Ø  可以作为一种备份机制,相当于热备份

Ø  可以用来做读写分离,均衡数据库负载

1.1.3.   MySQL主从同步的步骤

1.1.3.1.           准备操作

Ø 主从数据库版本一致,建议版本5.5以上

Ø 主从数据库数据一致

Ø 主从数据库所在的服务器能够相互ping通,即能够互联互通

Ø 确保从数据库能够连接主数据库,root用户能够远程访问数据库

1.1.3.1.           主数据库master修改

Ø 修改MySQL配置

修改/etc/mysql/my.cnf文件,找到下面的注释行,将注释打开:

server-id              =1   88

log_bin                 =/var/log/mysql/mysql-bin.log   89

Ø 重启mysql,创建用于同步的账户:

进入MySql的命令行,执行:如下命令

grant replication slave on*.* to 'user'@'ip' identified by 'password';

命令解释:

*.*:所有数据库的所有权限,可以根据需要设置

user:用于从数据库同步数据的账号

ip:从数据库的ip地址,可以设置为“%”即允许所有的ip

                                     password:用于从数据库同步数据账号的密码

然后执行mysql>flush privileges;更新数据库权限,使上面的命令生效。

Ø 查询master的状态

执行show master status;语句会输出:

注:记住自己上面红色圈起来的值,在后面会用到。执行完这个步骤后不要再操作主数据库了,防止主数据库状态值变化。

1.1.3.2.           从数据库slave修改

Ø 修改MySQL配置:

修改/etc/mysql/my.cnf文件,找到下面的注释行,将注释打开:

server-id           = 2

注:server-id的值必须保证没有被别的MySQL服务所使用。

重启mysql;

Ø 执行同步命令:

进入MySql的命令行,设置主数据库ip,同步帐号密码,同步位置,如下:

change master to master_host='192.168.3.135', master_user='repl',master_password='123456', master_log_file='mysql-bin.000002', master_log_pos=336;

注:master_log_file='mysql-bin.000002',master_log_pos=336,这两个属性的值,就是上面截图中,红色圈起的值。

继续执行命令:start slave;开启同步功能。

Ø 检查从数据库状态:

执行命令:show slave status\G;得到以下输出,输出的部分截图:

注:1.   将上面所有命令中的红色字体修改为自己实际的值。

2.    Slave_IO_RunningSlave_SQL_Running进程必须正常运行,即YES状态,否则说明同步失败。

3.    在配置从数据库是,如果出现了ERROR1201 (HY000): Could not initialize master info structure;这个错误,则是之前曾做过主从复制,解决方案是:运行命令 stop slave;成功执行后继续运行 reset slave;然后继续运行GRANT命令重新设置主从复制。如果是别的错误,请到搜索引擎搜索自己的错误及解决方案。如果没有出现错误,请忽略此项。

1.1.3.1.           其他可能用到的相关参数

Ø master端:

MySQL的安装目录下找到my.ini的配置文件,在最后加入如下配置:

# 不同步哪些数据库

binlog-ignore-db = mysql

binlog-ignore-db = test

binlog-ignore-db = information_schema

 

# 只同步哪些数据库,除此之外,其他不同步

binlog-do-db = game

 

# 日志保留时间

expire_logs_days = 10

 

# 控制binlog的写入频率。每执行多少次事务写入一次

# 这个参数性能消耗很大,但可减小MySQL崩溃造成的损失

sync_binlog = 5

 

# 日志格式,建议mixed

# statement 保存SQL语句

# row 保存影响记录数据

# mixed 前面两种的结合

binlog_format= mixed

1.2.       读写分离

完成MySQL的主从配置,实现数据的实时同步,采用架构的方式实现MySQL的读写分离。

统一认证平台完成数据的增删改的操作,保存数据到MySQLMaster的数据库中,Salve数据库从Master数据库中实时同步数据,应用系统从Salve数据库中读取书据。


猜你喜欢

转载自blog.csdn.net/liu15835467265liu/article/details/52039686