四、mysql主从复制

时间:2022-05-03 10:23:27
4.1、主服务器配置
1、登陆mysql数据库
mysql -uroot -p test
2、给从服务器设置授权用户
grant all slave on *.* to user@ip identified by ‘pass’;
或是grant replication slave on *.* user@ip identified by ‘pass’;
3、修改主数据库服务器的配置文件my.cnf,开启binlog,并设置server-id的值
log-bin=mysql-bin
4、在主服务器上设置读锁定有效,确保没有数据库操作,以便获得一个一致性的快照(选做)
flush tables with read lock;  (读锁定方便备份)
5、查看主服务器上当前的二进制日志名和偏移量值
show master status;
6、目前主数据库服务器已经停止了更新操作,生成主数据库的备份,备份的方式有两种:
(1)cp 全部的数据
(2)mysqldump 备份数据方法
如果主数据库的服务可以停止,那么直接cp数据文件应该是最快的生成快照的方法
7、主数据库备份完毕后,主数据库可以恢复写操作,剩下的操作只需要在从服务器上执行:
unlock tables;
8、把主数据库的一致性备份恢复到从数据库上,把以上的压缩包解压后放到相应的目录中即可

mysql从服务器的配置
修改从数据库的server-id,注意server-id的值必须是唯一的,不能和主数据库的配置相同,如果有多个从服务器,每个从服务器必须有自己唯一的server-id值
ps -ef | grep mysqld
mysqld 重启
pkill mysqld
mysql 重启
mysqld_safe —user=mysql &
!ps 查看进程
show slave status\G  G 默认的行和列倒转
mysql 中slave_io_running :yes
              salve_sql_running:yes

4.2、连接主服务器
1、在从服务器上的配置文件中:
server-id = 2
master-host=ip
master-user=user
master-password=pass
master-port=3306
log-bin=mysql-bin
#replicate-do-db=test
#replicate-do-table=test.t1
2、重新启动mysqld服务:
service mysqld restart
或是pkill mysqld
或是mysqld_safe —user=mysql &

4.3、查看相应的主从复制进程列表有两种
(1)processlist
show processlist \G
如出现:
state:waiting for master to send event
//连接主数据为成功,而且成功获取bin-log
state:has read all ready log; waiting for the slave i/o thread to update it
//成功执行bing-log 日志,正在等待着去再次连接主数据库并更新获取bin-log日志
(2)show salve status\G
如果出现:Slave_IO_Running:Yes
//此进程负责从服务器从主服务器上读取binlog日志,并写入从服务器上的中继日志中
Slave_SQL_Running:Yes
//此进程负责读取并且执行中继日志中的binlog日志
#注:以上两个都为yes z则表明成功,只要器重一个进程的状态是no,则表示服务进程停止,错误原因可以从last_error字段的值中看到

4.4、从数据库常用命令
start slave
启动复制线程
stop slave
停止复制线程
show slave status 
查看从数据库状态
show master logs
查看主数据库bin-log日志
change master to 
动态改变到住服务器的配置
show processlist
查看从数据库运行进程
 
4.5、mysql 常见错误
从数据库无法同步:
show salve status 显示 Slave_SQL_Running 为No, Seconds_Behind_Master为null
程序可能在slave上进行了写操作
也可能是slave 机器重启后,事务回滚造成的
mysql>slave stop;
mysql>set GLOBAT SQL_SLAVE_SKIP_COUNTER=1;
mysql>slave start;

方法二:
salve库,mysql>slave stop;—停掉slave 服务
Master库,mysql>show master status;
得到主服务器上当前的二进制日志名和偏移量
查看状态,然后到slave服务器上执行手动同步
mysql>change master to
master-host=“ip”,
master_user=“user”,
master_password=“pass”,
master_port=3306,
master_log_file=“mysql-bin.00003”,
master_log_pos=98,
启动slave服务,
mysql>slave start;
通过show slave status 查看slave_sql_running为yes,seconds_behind_master为0,既为正常。