mysql读写分离同步_mysql读写分离,主从同步

本文详细介绍了如何在Laravel框架中设置MySQL数据库的读写分离,包括配置database.php文件以区分主从数据库,设置访问权限,以及进行主从同步的步骤。在遇到同步问题时,还提供了错误排查和解决方法。
摘要由CSDN通过智能技术生成

** 主数据库用来写,从数据库用来读**

laravel设置方法:config/database.php 文件

'mysql' => [

'driver' => 'mysql',

'url' => env('DATABASE_URL'),

'read' => [

['host' => 'XX.XX.XX.XX', 'port'=>1234]

],

'write' => [

['host' => 'localhost', 'port'=>123]

],

// 'host' => env('DB_HOST', '127.0.0.1'),

// 'port' => env('DB_PORT', '3306'),

]

复制代码

这样就可以在不同的数据库读写分离了。记住要设置mysql的访问权限,同意该项目的ip访问mysql(grant all privileges on *.* to 'root'@'XX.X.XX.X'  IDENTIFIED BY 'mypassword' WITH GRANT OPTION; FLUSH PRIVILEGES;)

mysql主从同步设置(难点)

修改两mysql服务器的 /etc/my.conf文件

log-bin=mysql-bin

server-id= 13

复制代码

两服务器的server-id不能一样,log-bin 文件一般都已经存在,可改可不改(不改偶尔会有日志回滚同步的问题)。

修改好后重启mysql

service mysql restart

复制代码

登陆主数据库

mysql -u root -p

密码:*******

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'从数据库ip' identified by 'password';

mysql> FLUSH PRIVILEGES;

复制代码

获取主数据库日志信息

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000005 120| | mysql | |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

复制代码

记住file和position, 从数据库设定需要用到。

登陆从数据库

mysql -u root -p

密码:*******

mysql> change master to master_host='主服务器ip', master_user='slave', master_password='password',master_log_file='mysql-bin.000005', master_log_pos=120;

复制代码

如果修改了3306端口需要写入master_port=1234,否则连不上

mysql> start slave;

mysql> show slave status \G;

复制代码

当   Slave_IO_Running: yes                   Slave_SQL_Runing:yes     时,主从同步成功

报错情况:

Slave_SQL_Running: no  ; 可在下面看到Last_Error: ………………sql语句:的情况下,是sql日志同步失败,事务回滚的问题。

mysql> stop slave ;

mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

mysql> start slave ;

复制代码

运行后如果还是不行,看 Last_Error内容有没有改变,改变了就是有效的,继续重复上面的语句。

Slave_IO_Running: no  ;我出现这种情况的原因是在从服务器上连不上主服务器的mysql,因为master设置没有加入我自己修改过的master_port=1234。

在尝试分别在主从服务器连接对方的mysql中看到报错才知道原因:mysql -h XX.XX.XX.XX -u root -p --port=1234(linux终端连接其他服务器mysql)

Slave_IO_Running: 和 Slave_SQL_Runing yes 后经过测试修改主数据库,从数据库的内容也得到修改。

Nice!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值