laravel设置方法:config/database.php 文件
dart
代码解读
复制代码
'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文件
ini
代码解读
复制代码
log-bin=mysql-bin server-id = 13
两服务器的server-id不能一样,log-bin 文件一般都已经存在,可改可不改(不改偶尔会有日志回滚同步的问题)。
修改好后重启mysql
代码解读
复制代码
service mysql restart
登陆主数据库
shell
代码解读
复制代码
mysql -u root -p 密码:******* mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'从数据库ip' identified by 'password'; mysql> FLUSH PRIVILEGES;
获取主数据库日志信息
sql
代码解读
复制代码
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, 从数据库设定需要用到。
登陆从数据库
ini
代码解读
复制代码
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,否则连不上
ini
代码解读
复制代码
mysql> start slave; mysql> show slave status \G;
当 Slave_IO_Running: yes Slave_SQL_Runing:yes 时,主从同步成功
报错情况:
Slave_SQL_Running: no ; 可在下面看到Last_Error: ………………sql语句:的情况下,是sql日志同步失败,事务回滚的问题。
ini
代码解读
复制代码
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 后经过测试修改主数据库,从数据库的内容也得到修改。