NASDIY

mysql 主从配置 主主配置

MySQL 主从( MySQL Replication) ,主要用于 MySQL 的时时备份或者读写分离。在配置之前先做一下准备工作,配置两台 mysql 服务器,如果你的机器不能同时跑两台 Linux虚拟机,那可以考虑在同一个机器上跑两个 mysql 服务。 

MySQL 主从原理:

每个从仅可以设置一个主。

主在执行 sql 之后,记录二进制 log 文件( bin-log)。 从连接主,并从主获取 binlog,存于本地 relay-log,并从上次记住的位置起执行 sql, 

一旦遇到错误则停止同步。

从这几条 Replication 原理来看,可以有这些推论:

主从间的数据库不是实时同步,就算网络连接正常,也存在瞬间,主从数据不一致。

如果主从的网络断开,从会在网络正常后,批量同步。

如果对从进行修改数据,那么很可能从在执行主的 bin-log 时出现错误而停止同步,这

个是很危险的操作。所以一般情况下,非常小心的修改从上的数据。

一个衍生的配置是双主,互为主从配置,只要双方的修改不冲突,可以工作良好。

如果需要多主的话,可以用环形配置,这样任意一个节点的修改都可以同步到所有节点。

可以应用在读写分离的场景中,用以降低单台 MySQL 服务器的 I/O

可以实现 MySQL 服务的 HA 集群

可以是 1 主多从,也可以是相互主从(主主)

配置主从准备工作

我们设定192.168.1.202为主,端口 3306,192.168.1.201为从,端口为 3306。

在两台服务器上安装mysql,设置 root 密码

mysqladmin -u root  password 'a123456bc'

在主从上创建相同的测试库

mysql -uroot -pxtigess -e "create database db1;"

然后导出主的 mysql 库数据然后导入给从的 db1

mysqldump -uroot -pa123456bc -h192.168.1.202 db1 > 123.sql

mysql -uroot -pa123456bc db1 < 123.sql

配置主(master)

vim /usr/local/mysql/my.cnf

修改或添加: 

server-id=1

log-bin=mysql-bin

两个可选参数( 2 选 1):

binlog-do-db=db1,db2 #用来指定需要同步的库

binlog-ignore-db=db1,db2 #指定忽略不同步的库

修改配置文件后,重启 mysql

service mysqld restart

在主服务器授权给从一个用来同步数据的用户 repl

mysql -u root  -pa123456bc

> grant replication slave on *.* to 'repl'@'192.168.1.201' identified by 'a123123bc';

flush tables with read lock;  #锁定表

show master status; #一定要记住前两列的内容,后面会用到

设置从(slave)

vim /etc/my.cnf

修改或增加

server-id = 2 #这个数值不能和主一样

可选参数 

replicate-do-db=db1,db2 

replicate-ignore-db=db1,db2

意义同主的那两个可选参数,如果主已经定义过了,那么从上就不用再次加这些参数了。然后重启 mysqld 服务。

service mysqld restart

登录从 mysql

mysql -uroot -p

执行如下指令

stop slave;

> change master to master_host='192.168.1.202', master_port=3306, master_user='repl', master_password='a123456bc', master_log_file='mysql-bin.000001', master_log_pos=511;

start slave;

然后到主上解锁表

mysql -uroot  -pa123456bc -e "unlock tables"

在从上查看状态

show slave status\G;

看是否有如下显示

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

只有两个同时为 YES,才算正常。

测试主从

在主上删除表 db

> drop table db;

在从上看 db 表不存在了

> select count(*) from db;

建议: MySQL 主从机制比较脆弱,谨慎操作。如果重启 master,务必要先把 slave 停掉,也就是说需要在 slave 上去执行 slave stop 命令,然后再去重启 master 的 mysql 服务,否则很有可能就会中断了。当然重启完后,还需要把 slave 给开启 slave start。

主主配置

与主从的区别在于:

在主sql配置文件中增加:

auto-increment-increment = 2   //每次增长2,值应设为整个结构中服务器的总数,本案例用到两台服务器,所以值设为2。

auto-increment-offset = 1  //设置自动增长的字段的偏移量,即初始值为1

在从sql配置文件中增加:

auto-increment-increment = 2  //每次增长2

auto-increment-offset = 2 //设置自动增长的字段的偏移量,即初始值为2

在从sql中添加用来同步的用户repl2:

> grant replication slave on *.* to 'repl2'@'192.168.1.202' identified by 'a123123bc';

flush tables with read lock;  #锁定表

show master status; #一定要记住前两列的内容,后面会用到

登录主 mysql

mysql -uroot -p

执行如下指令

stop slave;

> change master to master_host='192.168.1.201', master_port=3306, master_user='repl2', master_password='a123456bc', master_log_file='mysql-bin.000001', master_log_pos=511;

start slave;

然后到从上解锁表

mysql -uroot  -pa123456bc -e "unlock tables"

在主上查看状态

show slave status\G;

分别在两个服务器上修改db1的数据,查看是否同步;


  • 评论列表:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.5.2 Zero Theme By

渝ICP备14007881号-1