文章目录
- 基于Mysql版本5.7
- 一:一主一从
- 0.赋予用户权限
- 1.主节点开启binlog日志
- 1.1修改my.cnf配置文件
- 1.2重启数据库
- 1.3查看状态
- 2.从节点开启IO线程和sql线程
- 2.1修改my.cnf配置文件
- 2.2重启数据库
- 2.3建立主从关系
- 2.4.开启复制
- 2.5查看状态
- 可能出现问题
- 二:主主复制
- 1.修改从节点
- 1.1修改my.cnf
- 1.2重启数据库
- 1.3创建用户,赋予权限
- 2.修改主节点
- 2.1建立连接
- 2.2开启复制
- 2.3查看状态
- 三:复制延迟怎么解决
- 四:mycat和sharding-jdbc
基于Mysql版本5.7
一:一主一从
0.赋予用户权限
只有复制权限
grant replication slave on *.* to '用户名'@'可以复制的ip(不填就是所有).%' identified by '密码'
通用权限
grant all on *.* to 'root'@'%' identified by '12345678'
刷新权限
flush privileges
1.主节点开启binlog日志
1.1修改my.cnf配置文件
#节点的唯一Id
server-id=1
#binlog日志的存放目录
log-bin=/var/lib/mysql/mysql-bin
#binlog的二进制日志格式,有row、statement、mixed三种格式
binlog-format=ROW
#同步的数据库名称(不填就是全部都复制)
binlog-do-db=test
#不同步的数据库名称
binlog_ignore_db=mysql
binlog-do-db和Replicate_Do_DB介绍
#在master上配置
binlog-do-db=指定mysql的binlog日志记录哪个db
binlog-ignore-db=不需要复制的数据库,如果复制多个数据库,重复设置这个选项即可
#在slave上配置
Replicate_Do_DB=指定slave要复制哪个库
replicate-ignore-db=指定slave不需要要复制哪个库
1.2重启数据库
service mysqld restart
#停止数据库
service mysqld stop
#启动数据库
service mysqld start
查看logbin状态
show variables like '%log_bin%';
1.3查看状态
show master status;
File : binlog日志的文件,其中000001是索引
Position: 事件节点
2.从节点开启IO线程和sql线程
IO线程读主节点binlog的数据,再又sql线程执行
2.1修改my.cnf配置文件
#节点的唯一Id
server-id=2
#读取主节点binlog后数据存放目录
relay-log=/var/lib/mysql/relay-bin
#为上面的文件配置索引,可以省略
relay-log-index=/var/lib/mysql/relay-bin.index
#binlog格式
binlog-format=ROW
2.2重启数据库
service mysqld restart
#停止数据库
service mysqld stop
#启动数据库
service mysqld start
2.3建立主从关系
change master to master_host='主节点Ip',master_port=3306,master_user='用户名',master_password='密码',master_log_file='主节点binlog日志文件名',master_log_pos=偏移量;
change master to master_host='主节点ip',master_port=3306,master_user='root',master_password='12345678',master_log_file='mysql-bin.000003',master_log_pos=2322;
2.4.开启复制
start slave;
#停止复制
stop slave;
#重启复制
reset slave;
2.5查看状态
show slave status\G;
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 从节点ip
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 154
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 154
Relay_Log_Space: 521
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 9b4d4e6b-92e3-11ec-acd8-00163e160614
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
ERROR:
No query specified
mysql>
主要看这俩个参数
#io线程
Slave_IO_Running: Yes
#sql线程
Slave_SQL_Running: Yes
可能出现问题
1.防火墙端口号没开放
2.修改完配置没有重启mysql
3.server-id重复
4.数据不一致导致,sqlIO为No
可以尝试:
1.删掉从库脏数据
2. 停止备份 stop slave;
3.重新连接 change master to ...master_log_pos=pos节点指向最新的;
二:主主复制
两个节点相互主从,把上面的配置给对方在来一遍就行了
1.修改从节点
1.1修改my.cnf
#添加binlog的存放目录,有了这个就会开启binlog
log-bin=/var/lib/mysql/mysql-bin
1.2重启数据库
service mysqld restart
查看binlog是否开启
show variables like '%log_bin%';
1.3创建用户,赋予权限
...
2.修改主节点
2.1建立连接
change master to master_host='主节点ip',master_port=3306,master_user='root',master_password='12345678',master_log_file='mysql-bin.000001',master_log_pos=154;
2.2开启复制
start slave;
2.3查看状态
show slave status\G;
三:复制延迟怎么解决
主库和从库的数据IO复制是需要一个时间的,可能会出现读写不一致的问题,无法完全解决
解决方案
1.加缓存
2.待学习
四:mycat和sharding-jdbc
这俩都实现了分库分表,读写分离(基于主从复制)