mysql的主从配置

linux日常服务部署平时练习的少,所以抽时间自己写一写自己搭建服务 过程

以下是笔记以及总结:

Mysql主从(Mysql Reolication),主要用于mysql的实时备份或者读写分离。在配置前先做好准备工作,配置2台mysql服务器,一台做master,一台做slave。

    mysql主从的原理其实就是:在每个从尽可以设置一个主,主在实行sql后,记录二进制log文件,从连接上主,并从主获得binlog,存于本地relay-log,并从上次记住的位置起,执行sql。一旦遇到错误则停止同步。

    因此可以有这些推论:主从之间 数据不是实时同步的,就算网络连接正常,也存在瞬间,主从数据 不一致。如果主从网络断开,会从网络正常后,批量同步。如果对从进行数据修改,那么很可能从在执行主的bin-log时出现了错误而停止同步,这个是很危险 操作。所以一般情况下,要非常小心的修改从上的数据。

    那么有一个衍生的配置是双主,互为主从配置,只要双方修改不冲突,可以工作良好。如果需要多主 话,可以使用环形配置,这样任意一个节点 修改都可以同步到所有节点。可以应用在读写分离的场景中,用于降低单台mysql服务器的io。可以实现mysql服务的HA集群,可以是1主多从,也可以hi互相主从(主主)

    首先现在2台机器上分别安装mysql

一台为mysql master :192.168.186.130

一台为mysql slave : 192.168.186.132

主机上端口号设置为
[mysqld]
port            = 3306

从机上的端口号设置为

port             =3307

先在主机上创建一个库

进入mysql

create database db1;

然后退出导出数据给db1

mysqldump -uroot -S /tmp/mysql2.sock mysql > 123.sql
mysql -uroot -S /tmp/mysql2.sock db1 < 123.sql


配置主机(master)

vim /etc/my.cnf


添加修改

server-id=1

log-bin=mysql-bin

binlog-do-db=db1

(两个可选参数 2 选 1:
binlog-do-db=db1,db2 #用来指定需要同步的库
binlog-ignore-db=db1,db2 #指定忽略不同步的库)

设置按成后,重启mysql

然后授权一个用户,在从机上用来向主机进同步

> grant replication slave on *.* to 'repl'@'192.168.186.132' identified by 'lxx123456';
> flush tables with read lock;
> show master status; #一定要记住前两列的内容,后面会用到


 设置从机的配置

vim /etc/my.cnf

修改相应的server-id  =2 (不能 和主机一样)

log-bin=mysql-bin 

如果主机上配置了指定数据库参数的话,这里就不必配置了

重启mysql


拷贝主的数据库db1到从上来

mysqldump -S /tmp/mysql.sock db1 > 123.sql;

mysql -uroot -S /tmp/mysql.sock -e "create database db1";

mysql  -S /tmp/mysql.sock db1 < db1.sql;


登陆从的mysql

执行以下命令

> slave stop;

> change master to master_host='192.168.186.130', master_port=3306, master_user='repl',
master_password='lxx123456', master_log_file='mysql-bin.000002', master_log_pos=106;
> slave start;

然后到主上执行

# mysql -e "unlock tables";

在从上查看状态
> show slave status\G;
看是否有如下显示
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

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

wKiom1ZJunqDThh4AAA9YMH6CUs767.png

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


这里特别注意一下,如果修改过my.cnf文件后,再执行slave同步的话,会出现错误:

ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log

原因:

该服务器之前做过主从复制,中途修改过my.cnf配置文件,重启mysql之后,binlog文件名和relay-log文件名已经改变,所以不能再从之前的relay-log复制了.

解决办法

mysql> reset slave;

Query OK, 0 rows affected (0.00 sec)



本文出自 “熊仔的博客” 博客,转载请与作者联系!

你可能感兴趣的:(mysql主从配置)