参考数据 高性能mysql p433.

主从同步

目的:数据分布,负载均衡,备份,高可用性和故障切换,数据库升级测试。

工作示意图:

步骤:

1.每台服务器上创建复制账号

登陆mysql,执行:

GRANT ALL ON *.* TO username@'10.100.0.%' IDENTIFIED BY 'password';

ALL :添加账户的权限,此处设计为全部权限都给,为之后的读写分离做准备,否则无法进行正常的数据库操作。

username:复制账号

password:密码

2.配置my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

server_id               = 1 #服务器id
log_bin                 = mysql-bin #打开二进制log用于复制
relay_log               =/var/lib/mysql/mysql-relay-bin
log-slave-updates   =1
read_only               =1


[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

3.打开主服务器mysql,

查看:show master status\G

出现类似数据。

服务器配置完毕

打开从服务器mysql,

执行:

change master to master_host=’192.168.174.167′,

          master_port=3306,

          master_user=’repl’,

          master_password=’foxconn’,

          master_log_file=’mysql-bin.000001′,

          master_log_pos=0;

master_host:主服务器ip,master_post:端口,master_user:用于复制用的账户,master_password:密码,master_log_file,对应之前所显示的日志文件,master_log_pos:开始复制的位置,从0开始意思是从日志的开头读起。
之后,执行:
show slave status\G

*************************** 1. row ***************************

             Slave_IO_State:

                Master_Host: server1

                Master_User: repl

                Master_Port: 3306

              Connect_Retry: 60

            Master_Log_File: mysql-bin.000001

        Read_Master_Log_Pos: 4

             Relay_Log_File: mysql-relay-bin.000001

              Relay_Log_Pos: 4

      Relay_Master_Log_File: mysql-bin.000001

           Slave_IO_Running: No

          Slave_SQL_Running: No

                             ...omitted...

      Seconds_Behind_Master: NULL

 

可以看到

Slave_IO_Running和Slave_SQL_Running是No

 

表明slave还没有开始复制过程。日志的位置为4而不是0,这是因为0只是日志文件的开始位置,并不是日志位置。实际上,MySQL知道的第一个事件的位置是4

 

执行:

start slave;#开始复制   slave有start stop reset操作。

查看status,

Slave_IO_Running和Slave_SQL_Running是YES

OK ,已经开始复制了,可以在主服务器上执行一些操作测试,PASS。

读写分离

 

Slave_IO_Running和Slave_SQL_Running是YES

这里使用360家的阿特拉斯
github地址:https://github.com/Qihoo360/Atlas

这里,不多说了被,去看官方文档来的快。https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md

好啦,配置OK,服务也启动了,那就测试一把吧

此处要注意,我们之前访问的数据库现在应该转移到这台分发服务器了,访问分发服务器ip:port即可实现读写分离。

例如:$conn=mysql_connect("192.168.174.142:1234", "repl", "123456");ok,pass。
至此我们已经完成了服务器的负载均衡,数据库的读写分离,数据库的主从同步了。

架构如下:

双机高可用、负载均衡、MySQL(读写分离、主从自动切换)架构设计