MYSQL主从备份+tp5读写分离

时间:2024-04-02 17:55:43

1、数据库配置

1.1、主从数据库配置

找到my.ini(windows)或者my.cnf(linux)

-- 主:数据库配置

在[mysqld]下配置

log-bin=mysql-bin

server-id=1

binlog-do-db=db-test

————————————————————————————————————

-- 从:数据库配置

[mysqld]

port = 3306

server-id = 11

log-bin=E:/wamp64/bin/mysql/mysql5.7.21/log-bin/mysql-bin #--windows

log-bin=mysql-bin  #-- linux

replicate-do-db=db-test

————————————————————————————————————

1.2、参数注解:

server-id 可以随意设置,但是不能相同

binlog-do-db=test 表示需要备份的数据库为test 

binlog-ignore-db=mysql 表示不需要备份的数据库为mysql   和binlog-do-db互斥

如果两个都不设的话,从服务器会复制主服务器的全部数据库 

log-bin=mysql-bin 表示开启二进制日志,并把二进制日志前缀改为mysql-bin,可*设置路径 ,不设置也可以

#同步单表用  replicate-wild-do-table

replicate-wild-do-table =test.test

replicate-wild-do-table =test.test1

replicate-wild-do-table =test.test2

  1. 执行语句

2.1、主:数据库

执行SQL:

create user 'mytest'@'192.168.55.137' identified by '123456'; -- 1、主:创建用户

grant replication slave on *.* to 'mytest'@'192.168.55.137' identified by '123456';-- 2、主:授予主从权限

flush privileges; --3、主:刷新权限:

show master status; 4、主:查看主服务状态:(如果没有需要重启主数据库)

————————————————————————————————————

例:(Navicat或控制台)

mysql> show master status;

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

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| mysql-bin.000001 |     1502 | madam        |                  |                   |

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

1 row in set

2.2、从:数据库

执行SQL:

 

CHANGE MASTER TO master_host = '192.168.55.131',

 master_user = 'mytest',

 master_password = '123456',

 master_log_file = 'mysql-bin.000001',-- 从第四步获取

 master_log_pos = 120;  -- 从第四步获取 -- 5、从:主从设置

 

start slave; --6、从:启动从服务

————————————————————————————————————

-- 注:参数详解

-- master_host: 主服务器的IP 

-- master_user: 主服务器上新创建的用户名 

-- master_password: 用户的密码 

-- master_port: 主服务器的端口,如果未曾修改,默认即可。 

-- master_log_file: 主服务器二进制日志文件的名称,填写查看主服务器的master状态时显示的File的值 

-- master_log_pos: 日志的位置,填写查看主服务器的master状态时显示的Position的值

3、查看主从同步是否配置成功

从:数据库

Linux mysql控制台和cmd控制台执行:show slave status \G

Navicat 执行:show slave status

 

这两个属性 是yes  就代表配置成功,失败可能需要重启 从:数据库

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

 

4取消主从备份,从:数据库执行

reset slave all;

 

注:

1.主:数据库需要开启端口访问,确保可以访问成功

2.可能用到的命令

service mysqld restart #重启mysql命令无效

ps -ef|grep mysql

find / -name 'my.cnf'

service mysql start # 启动mysql

service mysql stop # 关闭mysql

  1.   

①开始的时候数据库要一样,表、结构、数据条数,内容可以不一样,主键必须一样

② 如果不一样,从:数据库没有的,在主:数据库修改,。从:数据库不会增加并修改记录

 

4.将主服务器要同步的数据库加锁,避免同步时发生改变:

use 需要备份的数据库名;

flush tables with read lock;-- 锁定后会导致无法修改和插入数据

-- mysqldump -uroot -pxxx database_name >database_name.sql -- 可使用各种方式同步到 从:数据库

unlock tables;--  解锁

5.

数据库局域网访问配置

 本地连接CMD mysql方法(这是免安装版本mysql的连接方式方式)  

E:\wamp64\bin\mysql\mysql5.7.21\bin\mysql -uroot -p123456 -h'192.168.55.135' -P3306

 

 

5.1.1、登陆mysql

mysql -u root -p

5.1.2、修改mysql库的user表,将host项,从localhost改为%。%这里表示的是允许任意host访问,如果只允许某一个ip访问,则可改为相应的ip,比如可以将localhost改为192.168.1.123,这表示只允许局域网的192.168.1.123这个ip远程访问mysql。

mysql> use mysql;

mysql> update user set host = '%' where user = 'root';

mysql> select host, user from user;

mysql> flush privileges;

防火墙开放3306端口

5.2.1、打开防火墙配置文件    

vi  /etc/sysconfig/iptables

5.2.2、增加下面一行    

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

5.2.3、重启防火墙

service  iptables restart

注意:增加的开放3306端口的语句一定要在icmp-host-prohibited之前

 

 

5.2.2的windows版本

增加TCP端口80和3306的访问权限

MYSQL主从备份+tp5读写分离

 

 

java版本的读写分离

  https://blog.csdn.net/q18771811872/article/details/88694139

 

因为公司有tp5项目,因为简单, 所以呢 附带一个tp5的读写分离配置

Tp5主从读写分离

 

// 数据库调试模式

    'debug'           => true,

    // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)

    'deploy'          => 1,

    // 数据库读写是否分离 主从式有效

    'rw_separate'     => true,

    // 读写分离后 主服务器数量

    'master_num'      => 1,

    // 指定从服务器序号,可以默认不填写

'slave_no'        => '',

 

以下配置参数均为前主后从

// 服务器地址

    'hostname'        => '192.168.55.131,192.168.55.137',

    // 数据库名

    'database'        => 'linux',

    // 用户名

    'username'        => 'root,root',

    // 密码

    'password'        => '123456,'123456',

    // 端口

    'hostport'        => '3306,3306',