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
- 执行语句
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
①开始的时候数据库要一样,表、结构、数据条数,内容可以不一样,主键必须一样
② 如果不一样,从:数据库没有的,在主:数据库修改,。从:数据库不会增加并修改记录
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的访问权限
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',