文章目录
MYSQL主从关系
说明:MySql使用版本5.5
配置数据库my.ini文件
修改server1:主库文件
server-id=1
binlog-do-db=test
binlog-ignore-db=cctrace
binlog-ignore-db=information_schema
binlog-ignore-db=jeesite
binlog-ignore-db=mmall
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=pujin
binlog-ignore-db=rmp
binlog-ignore-db=smart_site
binlog-ignore-db=zp
log-slave-updates
replicate-do-db=test
replicate-ignore-db=cctrace
replicate-ignore-db=information_schema
replicate-ignore-db=jeesite
replicate-ignore-db=mmall
replicate-ignore-db=mysql
replicate-ignore-db=performance_schema
replicate-ignore-db=pujin
replicate-ignore-db=rmp
replicate-ignore-db=smart_site
replicate-ignore-db=zp
log-bin=mysql-bin
auto_increment_offset=1
auto_increment_increment=2
修改server2:从库文件
server-id=2
binlog-do-db=test
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
log-slave-updates
replicate-do-db=test
replicate-ignore-db=information_schema
replicate-ignore-db=mysql
replicate-ignore-db=performance_schema
log-bin=mysql-bin
auto_increment_offset=2
auto_increment_increment=2
重启mysql服务
配置项释义
server-id:标识,唯一,值范围在:1至2^23-1
binlog-do-db和replicate-to-db:要同步的数据库,多个需要同步的数据可以继续向下写
binlog-ignore-db和replicate-ignore-db:不需要同步的数据库
log-bin:配置是否在数据库有变动时写二进制日志
auto_increment_offset和auto_increment_increment:当同步断开,两台服务器分别有新数据进入,那么主键ID是自增长列会出现冲突的情况,会导致同步无法继续。加上上面两个设置后server1的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数,server2的为偶数。
2台机器上分别增加同步用户
在两台服务器的mysql用户里新增用户名(此用户名为你本机mysql用户名,如root),密码(mysql密码)的同步用户。
1.在主库上运行
grant replication slave on *.* to 从库用户名@从库ip identified by '从库密码';
2.在从库上运行
grant replication slave on *.* to 主库用户名@主库ip identified by '主库密码';
设置主机并启动从服务器线程
在主库上执行mysql命令:
mysql> show master status;
再在从库上执行命令:
mysql> stop slave;
mysql> change master to master_host='192.168.17.196',master_user='root',master_password='admin',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=513;
mysql> start slave;
mysql> show slave status\G;
查看结果:出现YES即配置成功
主主关系将上述步骤反向操作即可。
注意事项:
mysql5.5以后就在配置文件里不支持写master-host和master-user等方式了,如果my.ini配置文件没有写正确,重启mysql服务是不能正常启动的。所以在配置之前先看清楚使用的mysql是什么版本,mysql5.5是一个分界点。
一些常规的错误:
1.配置mysql首先数据库的数据及结构要保持一致,可以通过数据库传输来保证;
其次俩个库所在的服务器要互相能够ping通;
mysql版本要一致
2.Slave_IO_Running=No
多为MASTER_LOG_FILE的文件名不对,检查是否正确或多空格之类,还有一种情况是2服务器网络不通;
--Last_IO_Errno: 1236:
该错误代码代表版本不一,可能是库不同步或mysql版本不一致;
解决办法:
首先在从库上执行
stop slave;
查看主库master状态
mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000002
Position: 261
Binlog_Do_DB: test
Binlog_Ignore_DB: cctrace,information_schema,jeesite,mmall,mysql,performance_schema,pujin,rmp,smart_site,zp
1 row in set (0.00 sec)
ERROR:
No query specified
mysql> flush logs;
Query OK, 0 rows affected (0.21 sec)
刷新binlog日志
flush logs;
刷新后的日志会+1,例如上面的 File: mysql-bin.000002 会变成 File: mysql-bin.000003
再次查看master状态
mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000003
Position: 107
Binlog_Do_DB: test
Binlog_Ignore_DB: cctrace,information_schema,jeesite,mmall,mysql,performance_schema,pujin,rmp,smart_site,zp
1 row in set (0.00 sec)
ERROR:
No query specified
然后就不需要在操作master,切换到从库执行change master to master_host='192.168.17.196',master_user='root',master_password='admin',master_port=3306,master_log_file='mysql-bin.000003',master_log_pos=107;
执行start slave;
查看状态:
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.17.196
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 107
Relay_Log_File: DESKTOP-P0757RN-relay-bin.000002
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: test
Replicate_Ignore_DB: information_schema,mysql,performance_schema
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: 107
Relay_Log_Space: 419
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
1 row in set (0.00 sec)
3.Slave_SQL_Running=No
一般是slave机器重起后,事务回滚造成的,
解决办法:
mysql> stop slave ;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
其他错误可以查看错误代码,百度具体问题原因。
MYSQL环
这种主要是多个mysql之间互为主从关系情况下会用到,这个主要是server-id之不一样就好。
MYSQL清除主从关系
清除主从关系
注意,从库清除后,主库仍会留有链接信息,需对主库再进行清理(若后续不需要在建立主从则可无视该步骤),主要清除mysql-bin.XXXXX文件,ib_logfile?文件和mysql-bin.index(可选则清理)。ibdata1文件不建议清理,里面保存的是对数据库操作的记录信息。
主从:
1、SHOW SLAVE STATUS来检查它正在读取哪个日志 SHOW SLAVE STATUS来检查它正在读取哪个日志 ;
2、如果你确定从服务器已经同步过了,跟主服务器一样了,那么可以直接RESET MASTER将这些文件删除
SqlServer数据同步:
sqlserver同步
- git clone +链接
- git add .
- git commit “备注”
- git pull
- git push
- git status 查看状态命令