centos mysql单向同步_Linux中MySQL数据单向&双向同步笔记

4.启动同步

进到LinuxA(Master)的MySQL上:

mysql>show master status\G (查看master当前状态)

运行完以上命令显示结果如下:

File: mysql-bin.000001 (当前binlog日志文件)

Position: 98 (但前binlog日志文件位置)

Binlog_Do_DB: test (同步数据库)

Binlog_Ignore_DB:     (不需同步的数据,当前为设置)

-------------------------------------------------------------

进到LinuxB(Slave)的mysql上:

mysql>show slave status\G (查看slave同步状态)

运行完以上命令显示结果如下:

Slave_IO_State: Waiting for master to send event (slave 的io线程,获取master的binlog的日志内容,该为其目前的状态)

Master_Host: 192.168.59.123 (所需同步Master的ip地址)

Master_User: backa(同步所需的账号)

Master_Port: 3306(同步所需的mysql端口号)

Connect_Retry: 60

Master_Log_File: mysql-bin.000001 (master中的binlong的日志文件,如与master的日志文件名不同则同步失效)

Read_Master_Log_Pos: 98 (master中的binlong的日志文件的位置,即mysql-bin.000001文件中的第98位置开始同步,若与master上的位置不同则同步失效)

Relay_Log_File: localhost-relay-bin.000001

Relay_Log_Pos: 235

Relay_Master_Log_File: mysql-bin.000001

Slave_IO_Running: Yes  (Slave的io线程是否运行)

Slave_SQL_Running: Yes (slave的sql线程是否运行,需要io线程和sql线程同为yes才有效)

Replicate_Do_DB: test

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: 98

Relay_Log_Space: 235

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

如果Slave_IO_State:不为 Waiting for master to send event 表示未现实同步

原因可能很多先列举自己遇到:

1、 Master_Log_File: mysql-bin.000001

Read_Master_Log_Pos:98

日志文件和位置与LinuxA(Master)的当前状态不一致

解决方式:(在LinuxB的mysql操作)

mysql>slave stop;(修改前先关闭slave)

mysql>change master to

>master_log_file='mysql-bin.000001'  (ps:与LinuxA中的master的日志文件名相同)

>master_log_pso=98 (ps:与LinuxA中的master的日志文件当前位置相同)

>master_user='backa'  (如果同步的账户不一致,也可在此修改)

>master_password='backa'  (如果同步的账户密码不一致,也可在此修改)

>;

(PS:如果重新修改/etc/my.cnf 中相关slave的配置信息,重新启动查看 slave的状态还是显示未修改的数据,应为第一次是读取my.cnf,之后就会在/var/lib/mysql/下

生成一个master.info 的文件,因此第二次就不会读取my.cnf的内容,而是读取master.info中的内容,为此要想使重新修改的my.cnf生效的话,删除master.info文件,重起mysql

即可)

mysql>slave start;(重新启动slave)

mysql>show slave status\G (查看slave状态)

如果显示的 Slave_IO_State: Waiting for master to send event

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

祝贺成功实现单向同步即 LinuxA --> LinuxB 的同步;

在LinuxA的mysql上对test的 insert , delete ,update及对表结构的修改等操作 都会同步到 LinuxB的mysql上的test数据库上

(ps:如果在master上执行如 insert into to stu (uuid(),'yushan') 则同步到 slave上 ,id不同,因为其id是用uuid生成的,所以会不一致,之后对这条数据的

delete 和 update则不会实现同步)

三、双向同步(LinuxALinuxB)

双向同步最好使用的mysql版本要一致,保证二进制日志binlog的格式相同;双向同步即对任何一方mysql的insert,update,delete,alter等操作都会影响到另一方mysql中

的数据;由于前面已成功设置单向同步,在此基础上,把LinuxB(Slave)的配置 添加到 LinuxA(Master) 上,把LinuxA(Master)的配置添加到LinuxB(Slave)上,然后启动设

置同步的binlong文件及当前位置即可,具体操作如下:

1、 LinuxA 在原有Master的基础上增加Slave (同步LinuxB 上mysql上指定的test数据库中的数据)

LinuxB 在原有Slave的基础上增加Mmaster(同步LinuxA 上mysql上指定的test数据库中的数据);

2、在作为master(即LinuxB)的mysql上建立一个账户专门用于slave(即LinuxA)来进行数据同步

# mysql (默认用户,如设置了root密码,使用mysql -u root -p 登入mysql)

mysql>grant file on *.* to backb@'192.168.59.123' identified by 'backb'

mysql>flush privileges;

(PS:此backb账户只能通过ip为192.168.59.123的访问)

在LinuxA上测试账户backb是否可以访问LinxuB上的mysql:

#mysql -u backb -p -h 192.168.59.124(输入密码backb,可以访问说明设置正确)

3、修改 my.cnf 文件

在LinuxA 上的/etc/my.cnf 文件上添加Slave的配置

#server-id= 2 (mysql标示,唯一否则启动会出错误,因为原先已有标示为1,在此就可以注释掉,一个mysql只需一个标示即可)

master-host=192.168.59.124 (同步LinuxB (Master)的ip地址)

master-user=backb (同步所需的账号)

master-password=backb (同步账号的密码)

master-port=3306 (LinuxB 中mysql的访问端口)

replicate-do-db=test (所需同步的数据库名,如果是同步多个数据库,可以另起一行如 replicate-do-db=test1)

#replicate-do-table=test.stu (如果只需同步test数据库中的stu表)

#replicate-do-table=test.teacher(如果只需同步test数据库中的stu表)

master-connect-retry=60 (主服务器(Master)宕机或连接丢失的情况下,从服务器(slave)线程重新尝试连接主服务器之前睡眠的秒数)

修改完后保存退出,并重启mysql 如#service mysql restart (重启正常,表示配置没错误)

在LinxuB上的/etc/my.cnf文件上添加Master的配置

#server-id= 1 (mysql标示,唯一否则启动会出错误,因为原先已有标示为2,在此就可以注释掉,一个mysql只需一个标示即可)

log-bin=mysql-bin (日志文件,默认存在/var/lib/mysql下日志文件以mysql-bin为开头)

#log_bin= /var/log/mysql/mysql-bin.log(也可以自己指定,在此用# 表示注释掉了)

binlog-do-db =test(需要同步的数据库名,如需同步多个数据库,可以另起行如binlog-do-db =test1 )

修改完后保存退出,并重启mysql 如#service mysql restart (重启正常,表示配置没错误)

4.启动同步

进到LinuxB(Master)的mysql上:

mysql>show master status\G (查看master当前状态)

运行完以上命令显示结果如下:

File: mysql-bin.000003 (当前binlog日志文件)

Position: 231 (但前binlog日志文件位置)

Binlog_Do_DB: test (同步数据库)

Binlog_Ignore_DB:     (不需同步的数据,当前为设置)

-------------------------------------------------------------

进到LinuxA(Slave)的mysql上:

mysql>show slave status\G (查看slave同步状态)

运行完以上命令显示结果如下:

Slave_IO_State: Waiting for master to send event (slave 的io线程,获取master的binlog的日志内容,该为其目前的状态)

Master_Host: 192.168.59.124 (所需同步Master的ip地址)

Master_User: backb(同步所需的账号)

Master_Port: 3306(同步所需的mysql端口号)

Connect_Retry: 60

Master_Log_File: mysql-bin.000003 (master中的binlong的日志文件,如与master的日志文件名不同则同步失效)

Read_Master_Log_Pos: 98 (master中的binlong的日志文件的位置,即mysql-bin.000001文件中的第98位置开始同步,若与master上的位置不同则同步失效)

Relay_Log_File: localhost-relay-bin.000001

Relay_Log_Pos: 231

Relay_Master_Log_File: mysql-bin.000001

Slave_IO_Running: Yes  (Slave的io线程是否运行)

Slave_SQL_Running: Yes (slave的sql线程是否运行,需要io线程和sql线程同为yes才有效)

Replicate_Do_DB: test

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: 98

Relay_Log_Space: 235

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

以上显示为正确同步 如果显示的一下数据不是

Slave_IO_State: Waiting for master to send event

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

若与以上的三个状态表示不同,则未实现同步;可以采用以上单向同步中的 change master 进行重新设置(ps:防火墙需关闭)

以上都能正确配置完且显示的状态一致,那么祝贺您成功实现双向同步即 LinuxA LinuxB 的同步;0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于CentOS 7上的MySQL数据迁移,您可以采取以下步骤: 1. 在新的服务器上安装MySQL 5.7,并确保它与旧服务器上的版本相同。 2. 在新服务器上创建一个与旧服务器相同的数据库和用户,并授予适当的权限。 3. 在旧服务器上停止MySQL服务。 4. 在新服务器上启动MySQL服务,并确保它正在运行。 5. 在旧服务器上导出数据库: ``` mysqldump -u [username] -p[password] [database_name] > [file_name].sql ``` 6. 将导出的文件传输到新服务器。 7. 在新服务器上导入数据库: ``` mysql -u [username] -p[password] [database_name] < [file_name].sql ``` 8. 确认数据是否已成功导入。 对于CentOS 7上的MySQL 5.7主从数据迁移,您可以采取以下步骤: 1. 在新服务器上安装MySQL 5.7,并确保它与旧服务器上的版本相同。 2. 在新服务器上创建一个与旧服务器相同的数据库和用户,并授予适当的权限。 3. 在旧服务器上停止MySQL服务。 4. 在新服务器上启动MySQL服务,并确保它正在运行。 5. 在主服务器上执行以下命令: ``` FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; ``` 6. 记下"File"和"Position"的值。 7. 在主服务器上导出数据库: ``` mysqldump -u [username] -p[password] --master-data=1 [database_name] > [file_name].sql ``` 8. 将导出的文件传输到新服务器。 9. 在从服务器上导入数据库: ``` mysql -u [username] -p[password] [database_name] < [file_name].sql ``` 10. 在从服务器上执行以下命令: ``` CHANGE MASTER TO MASTER_HOST='[主服务器IP地址]', MASTER_USER='[主服务器用户名]', MASTER_PASSWORD='[主服务器密码]', MASTER_LOG_FILE='[File的值]', MASTER_LOG_POS=[Position的值]; START SLAVE; ``` 11. 确认数据是否已成功导入并且主从同步正常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值