-->

科技资讯

您的当前位置:首页 > 资讯 > MySQL

mysql优化-主从复制

2020-03-18 22:12:41  来源:admin 点击:736

工作原理:

  1. 在主库把数据更改记录到二进制文件中,

  2. 从库将主库的日志复制到自己的中继日志里面

  3. 从库读取中继日志事件,放到自己的库里面

image.png

操作:

主数据库

2.修改主服务器的MySQL配置文件my.ini,主要代码如下:

image.png

从数据库

 server-id=2 #服务器id #要从主机同步的库

 replicate-do-db=db1

 replicate-do-db=db2

 replicate-do-db=test

配置完重启mysql,记住!!!

3,通过show master status;查询主库状态,记录一下二进制日志文件和位置,在从服务器配置的时候要用。

image.png

3在主数据库中配置给从数据库的权限

GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.20.129' IDENTIFIED BY '密码'; #主数据库授权同步账户

FLUSH PRIVILEGES; #刷新权限

SHOW MASTER STATUS; #查看主服务状态


4.在从服务器上设置同步命令


CHANGE MASTER TO MASTER_HOST='192.168.20.128',MASTER_USER='root', MASTER_PASSWORD='XXXXXX',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=107;

start slave; #开启SLAVE同步

show slave status \G; #查看下slave状态,如果yes表示成功

image.png

5.其他注意事项

GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.20.129' IDENTIFIED BY 'XXXXXX'; #主数据库授权同步账户,哪个服务器可以登录

FLUSH PRIVILEGES; #刷新权限

SHOW MASTER STATUS; #查看主服务状态

配置从服务器的从数据库

{配置和改变slave服务器用于连接master服务器的参数【注意,MASTER_LOG_FILE=‘mysql-bin.000001’,MASTER_LOG_POS=601是通过前面的主数据库SHOW MASTER STATUS;得到】}

当Slave_IO_Running和Slave_SQL_Running都为Yes,说明主从复制配置成功,如果有必要停止或者撤销

同步账号的权限,还可操作。

stop slave; #停止SLAVE同步

GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.20.129' IDENTIFIED BY 'XXXXXX';# 撤销已经赋予给MySQL同步账户的权限

REVOKE REPLICATION SLAVE ON *.* FROM 'root'@'192.168.20.129';#revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可。

Mysql复制:master服务器将数据复制到另一台salves的过程,通过将数据库的ddl和dml的操作通过二进制传到复制服务器上,然后在从服务器重新执行。

特点:异步操作,slaves服务器不需要持续的接收数据,从服务器也可以作为其他从服务器的主服务器。

详细操作步骤:

01、主服务器将数据的改变记录到二进制日志(binary log)中;

02、从服务器将主服务器的binary log events复制到它的中继日志(relay log)中

从服务器的I/O进程会连接上master,发出日志请求,master接收到来自slave的I/O进程请求以后,通过负责复制的I/O进程通过请求信息读取指定日志位置之后的日志信息,返回给slave的I/O进程。

返回信息:日志、master服务器的文件名称以及位置,slave接收到信息,将日志内容写入relay-log的最后面,slave的SQL进程检测到新增内容后,会马上解析relay-log的内容变成可执行内容,执行。

03、从服务器重做中继日志中的事件,将数据的改变与从服务器保持同步。

Linux下主从同步:

Mysqld_multi管理多个服务进程或者单独启动服务

Mysql5.6和mysql5.7的区别

初始化数据库操作:

Mysql5.6  mysql_install_db

Mysql5.7  /usr/local/mysql/bin/mysqld  --initialize  --user=mysql --datadir=/usr/local/mysql/data   初始密码

修改密码:

Set password = password(‘packphp’);

ALTER USER ‘root’@’localhost’ PASSWORD EXPIRE NEVER;

Flush privileges;

Mysqld_multi实现单机主从复制

01、开启日志:

修改etc/my.cnf 

log-bin=/usr/local/mysql1/mysql-bin

server-id = 1

查看mysql服务器状态  yum install  net-tools

02、登录主服务器,设置一个复制用户的权限 

Grant replication slave

03、在master服务,设定度锁定有限

Flush tables with read lock;

04、查看日志状态

Show master status             二进制名称和偏移量值

Unlock tables;

Show slaves status;     查看从服务器的状态

Show processlist\G 

不同服务器之间的主从同步:

要求:mysql版本保持一致

从服务器数据库做设置:

指定复制使用的用户、主数据库服务器的IP、端口、以及开始执行复制的日志文件和位置

Mysqld_safe --skip-slave-start &

Stop slave

Change master to

Master_host=’192.168.0.101’,

Master_user=’rep1’,

Master_password=’123456’,

Master_log_file=’mysql-bin.00001’,

Master_log_pos=100;

Start slave;

阿里和腾讯云就不建议做主从同步,服务器之间本来就有延迟。同一局域网可以做

主要复制启动选项:

从服务器的启动参数、log-slave-updates(从服务器作为其它从服务器的主服务器-链式的复制)、 master-connect-retry 主从服务器丢失连接重新连接的时间间隔 (60秒)、read-only、slave-skip-errors(跳过binlog的错误的SQL语句)

指定复制的数据库或者数据表

Replicate-do-table=dbname.tablename

主从数据库管理、维护

查看slave的复制进度

Show processlist       slave_sql_running   SQL时间和系统时间的差距

Show slave status\G;

常见错误处理:

表结构不同

blob或者长字符串    max_allowed_packet=16777216

多主复制的自增长变量冲突问题

主从服务器的切换:

01、确保所有的relay_log全部更新

Show processlist\G;          Has read all relay log

02、停止B的slave服务,然后执行reset master重置成主数据库

Stop slave;   reset master;

03、配置B服务器的账号,在C服务器运行change master to ..........

相关文章更多 >

© 2024版权所有 水水网

电话:171780793