准备工作:
1.主从数据库版本最好一致
2.主从数据库内数据保持一致
3.主数据库:127.0.0.90 /CentOS7.6
4.从数据库:127.0.0.91 / CentOS7.6
二、主数据库master修改:
1.修改mysql配置文件my.cnf(或者my.ini)
我的在/etc/my.cnf,在[mysqld]部分插入如下两行:
[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id
master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作。
# 不同步哪些数据库
binlog-ignore-db = test
# 只同步哪些数据库,除此之外,其他不同步
binlog-do-db = insp_prod
2.重启mysql,登录mysql,创建用于同步的用户账号并授权。
mysql> CREATE USER 'repl_user'@'从机IP地址' IDENTIFIED BY '密码';#创建用户
mysql> GRANT REPLICATION SLAVE ON *.* TO ' repl_user '@'从机IP地址';#分配权限
mysql>flush privileges; #刷新权限
3.查看master状态,记录二进制文件名(mysql-bin.000001)和位置(863):
mysql > SHOW MASTER STATUS;
二、从服务器slave修改:
1.修改mysql配置文件
在/etc/my.cnf,在[mysqld]部分插入如下:
[mysqld]
server-id=2 #设置server-id,必须唯一
2.重启mysql
打开mysql会话,执行同步SQL语句(需要主服务器主机名ip,复制用户登陆用户名/密码,二进制文件的名称和位置):
mysql> CHANGE MASTER TO
-> MASTER_HOST='127.0.0.90',
-> MASTER_USER='rep1',
-> MASTER_PASSWORD='slavepass',
-> MASTER_LOG_FILE='mysql-bin.000003',
-> MASTER_LOG_POS=73;
3.启动从机slave同步复制进程:
mysql>start slave;
4.查看slave状态:
mysql>show slave status\G;
当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了。
Slave_IO_State:等待主节点发送事件 表示IO线程的状态
Master_Host:127.0.0.90 主的IP地址
Master_User:repl 主从复制的用户
Master_Port:3306 主机连接的端口
Connect_Retry:60 IO线程重连次数
Master_Log_File:mysql-bin.000001 IO线程正在读取的master上的binlog文件
Read_Master_Log_Pos:728 正在读取的主上的二进制日志文件位置
Relay_Log_File:relay-bin.000002 存放的本地relay log文件名
Relay_Log_Pos:941 存放的本地中继日志位置
Relay_Master_Log_File:mysql-bin.000001 SQL线程正在执行的主binlog文件
Slave_IO_Running:是的 IO线程状态
Slave_SQL_Running:是的 SQL线程状态
Replicate_Do_DB: 指定复制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:728 执行masterbinlog的位置
Relay_Log_Space:1142 所有relay log字节数总和
Until_Condition:无 指定复制条件
Until_Log_File: 指定复制到某个文件
Until_Log_Pos:0 指定复制到某个位置
Seconds_Behind_Master:0 从库落后主库时间,单位秒
Last_IO_Errno:0 最近一次IO thread错误
Last_IO_Error 最近一次IO thread错误详细信息
Last_SQL_Errno:0 最近一次sql thread错误
Last_SQL_Error: 最近一次sql thread错误详细信息
Replicate_Ignore_Server_Ids: 复制忽略SERVER_ID为XXX的实例
Master_Server_Id:1003306 主server_id
Master_UUID:dff47046-3ad5-11e8-86fe-080027de0e0e 掌握uuid
Master_Info_File:/storage/mysql/data/master.info 记录主信息文件
SQL_Delay:0 SQL延迟多少时间,延迟复制会用到
SQL_Remaining_Delay:NULL 当sql thread状态为等待主执行事件后的MASTER_DELAY秒,那么该值表示剩下延迟多少时间
Slave_SQL_Running_State:Slave已读取所有中继日志; 等待更多更新 sql thread状态
Master_Retry_Count:86400 主从复制断开时从最多能尝试重新连接的次数
Master_Bind: 绑定网卡
Last_IO_Error_Timestamp: io thread最近一次的错误时间
Last_SQL_Error_Timestamp: sql thread最近一次的错误时间
Retrieved_Gtid_Set:dff47046-3ad5-11e8-86fe-080027de0e0e:1-3 IO线程获取到的GTID
Executed_Gtid_Set:dff47046-3ad5-11e8-86fe-080027de0e0e:1-3 SQL线程执行的GTID
Auto_Position:1 使用auto_position,建议还是开启比较方便
Replicate_Rewrite_DB: 复制DB对应关系
CHANNEL_NAME: 多源复制的频道名称
异常情况解决:
Slave_SQL_Running:No时,按照以下步骤执行
(1)查看主服务器master状态,确定File和Position参数值。
(2)查看从服务器slave状态,确定File和Position参数值,是否与(1)主服务器的一致?若不一致则执行第(3)步。
(3)停止从服务器slave服务。
(4)修改从服务器master中的File和Position参数,与(1)保持一致。
(5)启动从机slave同步复制进程,并查看slave状态。当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了。
三、测试验证:
接下来就可以进行一些验证了,比如在主master数据库的test数据库的一张表中插入一条数据,在slave的test库的相同数据表中查看是否有新增的数据即可验证主从复制功能是否有效,还可以关闭slave(mysql>stop slave;),然后再修改master,看slave是否也相应修改(停止slave后,master的修改不会同步到slave),就可以完成主从复制功能的验证了。
查看binlog全部文件
mysql>show binary logs;#查看binlog是否开启NO为开启
mysql> show variables like 'log_bin%';#详细信息
mysql> show variables like 'binlog%';#查看binlog日志
mysql> show binlog events in'mysql-bin.000007';
mysql> show master status; #查看主的状态
mysql> show slave status\G; #查看从的状态
mysql> show processlist; #查看mysql的进程状态信息
mysql> show master logs; #查看主的日志
mysql> reset slave;#(慎用,清除日志同时会清空从的配置信息)
评论区