美文网首页
数据库优化之一 -- Mysql 主从备份

数据库优化之一 -- Mysql 主从备份

作者: 浪来了2016 | 来源:发表于2016-10-13 12:01 被阅读102次

    需求背景:

    后台统计数据和普通用户都集中在同一个时间点访问,并且统计数据大部分都是实时统计的,因而对服务器的压力,特别是数据库的压力特别大。

    第一个想到的改良思路是,先剥离后台统计和普通用户的操作,让他们分别访问不同的服务器,只要数据是一致即可,这样的压力就分开了。那第一步实现的方式就是 Mysql 主从备份。

    当前环境:

    服务器:

    阿里云ECS服务器

    Mysql 版本

    mysql  Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1

    主要流程

    1 配置Mysql主服务器

    配置 只有备份权限的帐号

    grant replication slave on *.* to 'copyuser1'@'ip 地址' identified by 'copyuser2016' with grant option;

    导出数据库

    mysqldump -u root -p wx_wdy > /home/wx_wdy.sql

    修改 my.cnf 配置文档

    [mysqld]

    log_bin=mysql-bin

    binlog-do-db=foodcase  //需要同步的db

    binlog-ignore-db=mysql  //不需要同步的 db

    binlog-ignore-db=wx_wdy

    binlog-ignore-db=test

    binlog-ignore-db=information_schema

    server_id=1  //主服务器

    datadir=/var/lib/mysql

    socket=/var/lib/mysql/mysql.sock

    character-set-server=utf8

    user=mysql

    # Disabling symbolic-links is recommended to prevent assorted security risks

    symbolic-links=0

    [mysqld_safe]

    log-error=/var/log/mysqld.log

    pid-file=/var/run/mysqld/mysqld.pid

     重启mysql,并查看配置

    mysql> show master status;

    File :mysql-bin.000003

    Position:13751 

    这两个值非常关键

    后续从服务器配置就需要用上

    2 配置Mysql从服务器

    创建数据库 

    create database foodcase;

    使用数据库 

    use foodcase;

    导入数据 

    source /home/db.sql;

    测试是否可以连接主服务器 

    [root@iZ94fzapvqdZ home]# mysql -u copyuser -h ip地址 -p

    修改 my.cnf 配置文档

    [mysqld]

    log_bin=mysql-bin

    replicate-do-db=foodcase  //要同步的 db

    replicate-ignore-db=mysql //不需要同步的 db

    replicate-ignore-db=wx_wdy

    replicate-ignore-db=test

    replicate-ignore-db=information_schema

    read_only=1 //只读

    server_id=2  //从服务器

    datadir=/var/lib/mysql

    socket=/var/lib/mysql/mysql.sock

    character-set-server=utf8

    user=mysql

    # Disabling symbolic-links is recommended to prevent assorted security risks

    symbolic-links=0

    [mysqld_safe]

    log-error=/var/log/mysqld.log

    pid-file=/var/run/mysqld/mysqld.pid

    重启 mysql,并关闭从服务器同步,配置,再打开

    mysql> slave stop;

    配置和主服务器关联读取,上面得到的两个字段就可以用上了

    mysql> change master to master_host=' IP 地址', MASTER_USER='copy', MASTER_PASSWORD='copypassword', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=13751;

    打开slave

    mysql> slave start;

    查看slave同步信息

    mysql> SHOW SLAVE STATUS\G;

    *************************** 1. row ***************************

    Slave_IO_State: Waiting for master to send event

    Master_Host: IP 地址

    Master_User: copyuser1

    Master_Port: 3306

    Connect_Retry: 60

    Master_Log_File: mysql-bin.000003

    Read_Master_Log_Pos: 638775

    Relay_Log_File: mysqld-relay-bin.000006

    Relay_Log_Pos: 374949

    Relay_Master_Log_File: mysql-bin.000003

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

    Replicate_Do_DB: foodcase

    Replicate_Ignore_DB: mysql,wx_wdy,test,information_schema

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

    Relay_Log_Space: 386287

    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:

    1 row in set (0.00 sec)

    ERROR:

    No query specified

    上面的  Slave_IO_Running,Slave_SQL_Running 都为 Yes 说明配置成功了!

    3. 测试

    主服务器建一个表,同时在从服务器就看到了,这样就是同步成功了。

    相关文章

      网友评论

          本文标题:数据库优化之一 -- Mysql 主从备份

          本文链接:https://www.haomeiwen.com/subject/ebwiyttx.html