一分一毛也是爱

微信

微信

支付宝

支付宝

观海听潮

观海听潮博客

登录
还没有账号?去注册
观海听潮

观海听潮博客

注册
×

我的名片

网名:观海听潮

职业:PHP开发工程师

现居:山东省-青岛市

Email:1256699215@qq.com

网站统计

  • 观海听潮•博客
  • 81篇
  • 151条
  • 278292次
  • 943次
  • 美国弗吉尼亚州

您现在的位置是:首页  > 技术杂谈  > linux  > mysql mysql

观海听潮

mysql主从复制

摘要
MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制

原理

MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制

准备工作

准备两台服务器,主:110.40.155.57 /linux,从:106.12.52.76 /linux;各自新建一个数据库,数据库版本最好保持一致,数据库数据要一致。

主数据库master修改

1、修改mysql配置

文件地址:/etc/my.cnf或者/etc/mysql/my.cnf(my.ini)

在文件[mysqld]插入:

[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id

修改后需要重启mysql,命令:

systemctl restart mysqld

2、创建用于通信的用户账号

在终端执行命令,打开mysql会话:

cd /www/server/mysql
mysql -u root -p
//输入root用户密码,宝塔用户密码在数据库模块可以看到
//创建用户master_root,密码zerfqdfasd ###ip为从数据库ip,或者%
mysql> CREATE USER 'master_root'@'106.12.52.76' IDENTIFIED BY 'zerfqdfasd';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'master_root'@'106.12.52.76';//授权
mysql> flush privileges;//刷新权限
mysql> SHOW MASTER STATUS;//查看master状态,记录二进制文件名(mysql-bin.000004)和位置(27603382)

1638429187(1).jpg

从服务器slave修改

1、修改mysql配置

文件地址:/etc/my.cnf或者/etc/mysql/my.cnf(my.ini)

在文件[mysqld]修改:

[mysqld]
server-id=2 #设置server-id,必须唯一

修改后需要重启mysql,命令:

systemctl restart mysqld

2、进行同步配置

在终端执行命令,打开mysql会话:

cd /www/server/mysql
mysql -u root -p
//输入root用户密码,宝塔用户密码在数据库模块可以看到
//执行同步sql语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置)
mysql> CHANGE MASTER TO
    -> MASTER_HOST='110.40.155.57',
    -> MASTER_USER='master_root',
    -> MASTER_PASSWORD='zerfqdfasd',
    -> MASTER_LOG_FILE='mysql-bin.000004',
   -> MASTER_LOG_POS=27603382;
//启动slave服务
mysql> start slave;
mysql> stop slave;//关闭slave服务(在配置有问题时,如果需要更改同步命令需要先关闭slave服务)

3、查看slave状态

show slave status\G;

Slave_IO_Running和Slave_SQL_Running都是Yes的时候才算配置好

1638441304(1).jpg

4、常见错误

Error_Code:1045  密码不一致,从服务器的server_id配置完未重启mysql

Error_Code:2003  防火墙未关闭  https://www.cnblogs.com/zxg-blog/p/9835263.html

Error_Code:2061  主服务器的账户权限有问题,ip是否配置为从服务器ip,权限是否打开

5、补充说明

指定特定的数据库进行同步,在主服务器的my.cnf文件[mysqld]插入

# 不同步哪些数据库  
binlog-ignore-db = mysql  
binlog-ignore-db = test  
binlog-ignore-db = information_schema  
# 只同步哪些数据库,除此之外,其他不同步  
binlog-do-db = game

需要通过数据库相关命令验证是否配置成功,比如在主数据库插入数据,看从数据库是否也有。


上一篇:git常用命令

下一篇:公众号基本配置

讨厌 (0)
微博logo QQ空间logo QQlogo 豆瓣logo 人人logo 百度贴吧logo 有道云笔记logo

文章评论

表情表情
×
图片图片

评论列表