mysql主从配置及其读写分离
Posted 前度天下
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;)
以上是关于mysql主从配置及其读写分离的主要内容,如果未能解决你的问题,请参考以下文章