• MySQL主从复制详细部署过程


      环境介绍:
     
       采用多实例进行主从复制测试,多实例方法请参考网上其它文档,其实多实例和双服务器对于测试环境来说是一样的。
     
       当前采用3306端口进程为Master,3307端口进程为Slave.
     
       Mysql版本:
     
       mysql> select version();
     
       +-------------+
     
       | version() |
     
       +-------------+
     
       | 5.1.68 |
     
       +-------------+
     
       1 row in set (0.04 sec)
     
       配置过程如下:
     
       1.主库开启bin-log功能,配置server-id
     
       该参数在my.cnf中添加
     
       vi /data3/3306/my.cnf
     
       ……
     
       [mysqld]
     
       server-id = 1
     
       log-bin = /data3/3306/mysql-bin
     
       ……
     
       可查看命令show variables like 'log_bin'; show variableslike 'server_id';
     
       mysql> show variables like 'log_bin';
     
       +---------------+-------+
     
       | Variable_name | Value |
     
       +---------------+-------+
     
       | log_bin | ON |
     
       +---------------+-------+
     
       1 row in set (0.00 sec)
     
       mysql> show variables like 'server_id';
     
       +---------------+-------+
     
       | Variable_name | Value |
     
       +---------------+-------+
     
       | server_id | 1 |
     
       +---------------+-------+
     
       1 row in set (0.00 sec)
     
       2.在主库上创建复制授权用户
     
       mysql>grant replication slave on *.* to rep@'10.0.0.%' identified by '123456';
     
       QueryOK, 0 rows affected (0.19 sec)
     
       对所有库所有表,授权rep用户只有复制的权限。
     
       3.对数据库锁表只读
     
       mysql>flush tables with read lock;
     
       QueryOK, 0 rows affected (0.07 sec)
     
       该命令退出当前连接数据库后,锁表功能就失效。
     
       4.记录log-bin文件名和位置
     
       mysql>show master status;
     
       +------------------+----------+--------------+------------------+
     
       |File | Position |Binlog_Do_DB | Binlog_Ignore_DB |
     
       +------------------+----------+--------------+------------------+
     
       |mysql-bin.000002 | 340 | | |
     
       +------------------+----------+--------------+------------------+
     
       1row in set (0.00 sec)
     
       该命令需要在锁表后执行,生产环境中每时都有数据写入,只有确保锁表后show master status才准确。
     
       5.导出全部数据
     
       由于退出当前mysql登陆窗口,锁表功能就失效,需克隆一个会话进行全备。
     
       [root@Web01_n~]# mysqldump -B -A --events -S/data3/3306/mysql.sock|gzip >/tmp/3306mysql.sql.gz
     
       [root@Web01_n~]# ll /tmp/3306mysql.sql.gz
     
       -rw-r--r--1 root root 136573 10-29 16:14 /tmp/3306mysql.sql.gz
     
       导完库查看主库状态,确定bin-log信息没有变化
     
       mysql>show master status;
     
       +------------------+----------+--------------+------------------+
     
       |File | Position |Binlog_Do_DB | Binlog_Ignore_DB |
     
       +------------------+----------+--------------+------------------+
     
       |mysql-bin.000002 | 340 | | |
     
       +------------------+----------+--------------+------------------+
     
       1row in set (0.00 sec)
     
       注:由于我的数据库并没有设置用户名和密码,所以未指定-u -p参数。
     
       6.解除锁表
     
       退出锁表登陆窗口或使用命令 unlock tables;
     
       mysql>flush tables with read lock;
     
       QueryOK, 0 rows affected (0.00 sec)
     
       mysql>
     
       mysql>quit
     
       Bye
     
       或
     
       mysql>unlock tables;
     
       QueryOK, 0 rows affected (0.00 sec)
     
       7.从库配置文件配置
     
       [root@Web01_n3307]# netstat -plnt |grep 3307
     
       tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 11466/mysqld
     
       [root@Web01_n3307]# kill 11466
     
       [root@Web01_n3307]# netstat -plnt |grep 3307
     
       [root@Web01_n3307]# vi /data3/3307/my.cnf
     
       ……
     
       [mysqld]
     
       server-id= 2 #如果ID和master一致,slave的IO线程会起不来
     
       log-bin= /data3/3307/mysql-bin #从库上开启binlog日志功能,一般用于其它从库从这进行复制,也可不加这条命令
     
       ……
     
       [root@Web01_n3307]# mysqld_safe --defaults-file=/data3/3307/my.cnf &
     
       [4]11572
     
       [root@Web01_n3307]# 131029 16:56:10 mysqld_safe Logging to'/data3/3307/mysql_oldboy3307.err'.
     
       13102916:56:10 mysqld_safe Starting mysqld daemon with databases from/data3/3307/data
     
       [root@Web01_n3307]# netstat -plnt|grep 3307
     
       tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 11751/mysqld
     
       杀掉原先进程,修改配置并重启。重启参数使用mysqld_safe,&是后台执行。
     
       8.导入全部数据至从库
     
       解压备份的数据
     
       [root@Web01_n~]# ll /tmp/
     
       -rw-r--r--1 root root 136573 10-29 16:14 3306mysql.sql.gz
     
       [root@Web01_n~]# gzip -d /tmp/3306mysql.sql.gz #解压gz文件,并删除压缩包
     
       [root@Web01_n~]# ll /tmp/3306mysql.sql
     
       -rw-r--r--1 root root 502068 10-29 16:14 /tmp/3306mysql.sql
     
       导入数据
     
       [root@Web01_n~]# mysql -S /data3/3307/mysql.sock </tmp/3306mysql.sql
     
       9.从库设置change master语句
     
       binlog位置状态为主库show master status查看的位置状态
     
       CHANGEMASTER TO
     
       MASTER_HOST='10.0.0.237',
     
       MASTER_PORT=3306,
     
       MASTER_USER='rep',
     
       MASTER_PASSWORD='123456',
     
       MASTER_LOG_FILE='mysql-bin.000002',
     
       MASTER_LOG_POS=340;
     
       演示效果
     
       mysql>CHANGE MASTER TO
     
       -> MASTER_HOST='10.0.0.237',
     
       -> MASTER_PORT=3306,
     
       -> MASTER_USER='rep',
     
       -> MASTER_PASSWORD='123456',
     
       -> MASTER_LOG_FILE='mysql-bin.000002',
     
       -> MASTER_LOG_POS=340;
     
       QueryOK, 0 rows affected (0.01 sec)
     
       配置master的IP,端口,用户,密码,binlog文件名与位置。注意此处的MASTER_LOG_FILE与MASTER_LOG_POS的值为上面主库show master status得到
     
       10.从库开启slave开关
     
       mysql>start slave;
     
       QueryOK, 0 rows affected (0.00 sec)
     
       开启从库的IO线程和SQL线程。也可单独开启,START SLAVE IO_THREAD;START SLAVE SQL_THREAD;
     
       11.从库查看同步状态
     
       mysql>show slave statusG
     
       ***************************1. row ***************************
     
       Slave_IO_State: Waiting formaster to send event
     
       Master_Host: 10.0.0.237
     
       Master_User: rep
     
       Master_Port: 3306
     
       Connect_Retry: 60
     
       Master_Log_File: mysql-bin.000002
     
       Read_Master_Log_Pos: 340
     
       Relay_Log_File: relay-bin.000002
     
       Relay_Log_Pos: 251
     
       Relay_Master_Log_File: mysql-bin.000002
     
       Slave_IO_Running: Yes
     
       Slave_SQL_Running: Yes #两个YES代表主从同步线程正常
     
       Replicate_Do_DB:
     
       Replicate_Ignore_DB: mysql
     
       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: 340
     
       Relay_Log_Space: 400
     
       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 #查看主从同步延迟,延迟大则可能需要优化
     
       Master_SSL_Verify_Server_Cert:No
     
       Last_IO_Errno: 0
     
       Last_IO_Error:
     
       Last_SQL_Errno: 0
     
       Last_SQL_Error:
     
       1row in set (0.00 sec)
     
       命令最后使用;是表格形式,使用G是行形式。有些内容使用G更直观。
     
       12.主从同步测试
     
       在master上创建数据库及表,看是否同步。
     
       [root@Web01_n3307]# mysql -S /data3/3306/mysql.sock -e "create database yy1028;"
     
       [root@Web01_n3307]# mysql -S /data3/3307/mysql.sock -e "show databases;"
     
       +--------------------+
     
       |Database |
     
       +--------------------+
     
       |information_schema |
     
       |mysql |
     
       |test |
     
       |test1 |
     
       |yy1028 |
     
       +--------------------+
     
       主从同步测试成功!
     
       其它:
     
       1.在主库上执行show master status;为空问题
     
       因为没有开启bin-log功能,或没有生效。在数据库里查看 show variables like '%log_bin%';看log-bin是否有on托福答案
     
       2. 控制binlog文件过期时间,在my.cnf中加入expire_logs_days = 7 参数,则7天后该binlog日志就自动删除托福答案
     
     
     

  • 相关阅读:
    (8)ftp配置文档
    (6)centos安装和解压
    (8)python tkinter-画布
    (7)python tkinter-菜单栏
    (6)python tkinter-容器、子窗体
    (5)python tkinter-单选、多选
    bzoj1096 [ZJOI2007]仓库建设
    hdu3507 Print Article(斜率DP优化)
    bzoj1996 [Hnoi2010]chorus 合唱队
    跳石头
  • 原文地址:https://www.cnblogs.com/haosola/p/3400876.html
Copyright © 2020-2023  润新知