ToB企服应用市场:ToB评测及商务社交产业平台

标题: MySQL数据库主从搭建(详细图文) [打印本页]

作者: 守听    时间: 2024-9-9 07:00
标题: MySQL数据库主从搭建(详细图文)
MySQL数据库主从搭建(详细图文)

媒介
主从原理:

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

1.主从数据库版本一致
2.主从数据库内数据保持一致
3.克隆虚拟机,只需在一个虚拟机搭建情况,然后克隆两台虚拟机当做从机(我搭建的是一主两从)
二、Master

1.修改mysql配置文件
  1. cd /etc
  2. vim my.cnf
  3. 或者 vim /etc/my.cnf
  4. ./etc/my.cnf
  5. ##master 中my.cnf需要添加的内容
  6. server-id=188    //master  192.168.88.188  去最后的188作为id
  7. log-bin=mysql-bin
  8. binlog_format=MIXED
  9. sync_binlog=1
  10. expire_logs_days=0
  11. binlog-do-db=news    //news 为数据库的名称
复制代码

2.创建授权用户
//开启mysql服务
  1. service mysqld start
复制代码
//查看mysql运行状态
  1. service mysqld status
复制代码
//进入mysql
  1. mysql -u root -p
复制代码
注意复制粘贴后将标点符号更改为西文符号!!
//创建一个从机用户 并指定可以从本机外部举行访问
//MySQL5.7clone为密码,设置一个自己能记住的密码
  1. create user 'slave'@'%' identified by ‘MySQL5.7clone’
复制代码
//设置slave远程从机账户拥有一个可以复制的权限
  1. grant replication slave,replication client on *.* to ‘slave’@’%’
复制代码

3.查看日志和宿主机master的状态

代码如下(示例):
查看log_bin日志是否属于开启状态
  1. show variables like ‘log_bin’;
复制代码
查看当前操纵的宿主机是否为master状态
  1. show master status;
复制代码


这里要记住 file和position,后面配置slave会用到
该处使用的url网络哀求的数据。
三、slave操纵

1.修改宿主机的server-id
进入从库宿主机后修改my.cnf配置文件加入server-id即可
同master操纵
但是只需要 添加server-id即可
2.进入mysql执行相关命令
//起首要关掉slave
  1. stop slave
复制代码
//重点
//执行下面的语句 将下面的语句复制到记事本上,保证是一行数据,然后复制到mysql中
//master_host为master的ip
//master_password 为授权时设置的密码
//master_log_file 分别为上文中需要你记住的file和position
  1. change master to master_host='192.168.88.188', master_port=3306,master_user='slave',master_password='MySQL5.7clone',master_log_file='mysql-bin.000001',master_log_file=617
复制代码


//执行完后开启slave
start slave;

查看同步状态
  1. show slave status \G
复制代码
若下面两个状态都是yes,则搭建成功,若是Slave_IO_Running为NO,则去查看master和slave的uuid是否一致
  1.   Slave_IO_Running: No
  2.   Slave_SQL_Running: Yes
复制代码
  1. *************************** 1. row ***************************
  2.                Slave_IO_State:
  3.                   Master_Host: 192.168.25.136
  4.                   Master_User: slave
  5.                   Master_Port: 3306
  6.                 Connect_Retry: 60
  7.               Master_Log_File: mysql-bin.000001
  8.           Read_Master_Log_Pos: 617
  9.                Relay_Log_File: localhost-relay-bin.000001
  10.                 Relay_Log_Pos: 4
  11.         Relay_Master_Log_File: mysql-bin.000001
  12.              Slave_IO_Running: No
  13.             Slave_SQL_Running: Yes
  14.               Replicate_Do_DB:
  15.           Replicate_Ignore_DB:
  16.            Replicate_Do_Table:
  17.        Replicate_Ignore_Table:
  18.       Replicate_Wild_Do_Table:
  19.   Replicate_Wild_Ignore_Table:
  20.                    Last_Errno: 0
  21.                    Last_Error:
  22.                  Skip_Counter: 0
  23.           Exec_Master_Log_Pos: 617
  24.               Relay_Log_Space: 154
  25.               Until_Condition: None
  26.                Until_Log_File:
  27.                 Until_Log_Pos: 0
  28.            Master_SSL_Allowed: No
  29.            Master_SSL_CA_File:
  30.            Master_SSL_CA_Path:
  31.               Master_SSL_Cert:
  32.             Master_SSL_Cipher:
  33.                Master_SSL_Key:
  34.         Seconds_Behind_Master: NULL
  35. Master_SSL_Verify_Server_Cert: No
  36.                 Last_IO_Errno: 1593
  37.                 Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
  38.                Last_SQL_Errno: 0
  39.                Last_SQL_Error:
  40.   Replicate_Ignore_Server_Ids:
  41.              Master_Server_Id: 136
  42.                   Master_UUID:
  43.              Master_Info_File: /var/lib/mysql/master.info
  44.                     SQL_Delay: 0
  45.           SQL_Remaining_Delay: NULL
  46.       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
  47.            Master_Retry_Count: 86400
  48.                   Master_Bind:
  49.       Last_IO_Error_Timestamp: 201114 11:40:14
  50.      Last_SQL_Error_Timestamp:
  51.                Master_SSL_Crl:
  52.            Master_SSL_Crlpath:
  53.            Retrieved_Gtid_Set:
  54.             Executed_Gtid_Set:
  55.                 Auto_Position: 0
  56.          Replicate_Rewrite_DB:
  57.                  Channel_Name:
  58.            Master_TLS_Version:
  59. 1 row in set (0.00 sec)
复制代码
3.UUID的相关配置

//查看主机与从机的uuid
  1. Show variables like ‘%uuid%’
复制代码
//如果两边一致就需要将从库的auto.cnf文件删除
//可以选择备份 大概删除
//备份
  1. mv auto.cnf  ./auto.cnf.back
复制代码
//删除
  1. rm -rf auto.cnf
复制代码
删除后在启动从机mysql服务进入客户端执行salve状态
  1. show slave status \G
复制代码
//状态会变为
  1. Slave_IO_Running: Yes
  2. Slave_SQL_Running: Yes
复制代码
四、测试

在数据库工具新建毗连,一个为master,将master的数据导出
新建两个slave毗连,将数据导入
修改master毗连中的数据,查看从库是否改变,改变则MySql数据库主从搭建成功

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4