mysql主从配置及其读写分离

mysql主从配置意思就是一个主mysql服务器,一个从mysql服务器,一共要用到两台服务器。主服务器新增一个账号专门让从服务器来访问同步工作,主从配置完成后,主服务器主要就是新增和update操作,从服务器主要是查询工作。

主服务器ip为:192.168.31.11

从服务器ip为:192.168.31.12

create user slave; //创建新用户
//slave用户必须具有REPLICATION SLAVE权限,除此之外没有必要添加不必要的权限,密码为mysql。说明一下192.168.31.12,这个配置是指明slave用户所在服务器。
grant replication slave on *.* to 'slave'@'192.168.31.12' identified by '111111';
flush privileges;

 在主服务器的/etc/my.cnf配置文件中配置以下信息

server-id=11   //给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾号
log-bin=master-bin
log-bin-index=master-bin.index

重启一下mysql,运行一下show master status;看看主服务器的状态是否正常

 然后配置从服务器的mysql配置文件,修改完成之后然后重启mysql

log_bin           = mysql-bin
server_id         = 12
relay_log         = mysql-relay-bin
log_slave_updates = 1
read_only         = 1
//server_id是必须的,而且唯一。slave没有必要开启二进制日志,但是在一些情况下,必须设置,例如,如果slave为其它slave的master,必须设置bin_log。在这里,我们开启了二进制日志,而且显示的命名(默认名称为hostname,但是,如果hostname改变则会出现问题)。
//relay_log配置中继日志,log_slave_updates表示slave将复制事件写进自己的二进制日志(后面会看到它的用处)。
//有些人开启了slave的二进制日志,却没有设置log_slave_updates,然后查看slave的数据是否改变,这是一种错误的配置。所以,尽量使用read_only,它防止改变数据(除了特殊的线程)。但是,read_only并是很实用,特别是那些需要在slave上创建表的应用。

 接下来就是链接主服务器了

change master to master_host='192.168.31.11', //Master 服务器Ip
master_port=3306,
master_user='repl',
master_password='mysql', 
master_log_file='master-bin.000002',//Master服务器产生的日志
master_log_pos=107;

查看从服务器的状态 show slave status;

主要是看

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

这两个都是yes则基本上没问题。

现实问题,一般情况,主服务器是之前就有的,而且还有很多数据,随着业务的提升,才需要从服务器,现在配置好了从服务器,但是现在从服务器上还没有数据的,这个是有需要将主服务器的数据手动复制到从服务器上,具体的操作是采用mysqldump。

首先是进行锁表操作,防止在复制的过程中有新的数据发生导致两边数据不一致。打开一个新的窗口进行mysql锁表操作。

mysql> flush tables with read lock;

然后在shell中使用mysqldump导出数据库

shell>  mysqldump  web -uroot -proot --lock-all-tables > ~/web.db

然后用scp命令将导出来的数据传送到从服务器上

scp ~/web.db root@192.168.31.12:/root/             回车就会提示你输入密码

传送完毕后,然后在从服务器里面将数据导入到数据库中,然后在回到主服务器解锁。

mysql>   unlock tables;


注意:现在出现了一个问题就是,我在锁表的时候,有一个用户就在执行删除某一条数据,现在解锁完成了,删除数据就成功了,但是现在从服务器发生了错误,就是那条sql无法执行。

这个问题如何解决呢?

 这个时候就先在主服务器上进行锁表操作(flush tables with read lock),然后在从服务器上停止(slave stop)然后在重启一下(slave start),然后在主服务器解锁(unlock tables;)

原文地址:https://www.cnblogs.com/qiandu/p/7200285.html