首页 > 代码库 > mysql主从

mysql主从

实验目的:

用于主库挂掉后快速切换到从库,实现备份作用;

实验环境:

两个linux主机,均己安装mysql,在同局域网内相互通;

A: 192.168.0.117

B: 192.168.0.118

步骤:

1、主库A上操作:

[root@mysql-master ~]# /etc/init.d/mysqld start

[root@mysql-master ~]# mysqladmin -u root password  "123456"    #没有root密码先设密码

mysql>GRANT REPLICATION SLAVE ON *.* TO ‘backup’@’192.168.1.101‘ IDENTIFIED BY ‘123456’;       #给从服务器授权

mysql>flush privileges;

[root@mysql-master ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql

server-id = 1
log-bin=mysql-bin

binlog_ignore_db             #不需要备份的数据库,多个写多行

master-connect-retry=60 #如果从服务器发现主服务器断掉,重新连接的时间差(秒)
replicate-do-db =test #只复制某个库

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

2、从库B上操作:

[root@mysql-slave ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0

server-id = 2
master-host=192.168.0.117
master-user=root
master-password=root

master-port=3306
replicate-ignore-db=mysql   #忽略复制哪个库,可多行多个库;

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

3、主从上都重启mysqld服务

[root@mysql-slave ~]# /etc/init.d/mysqld restart

4、查看主从库的状态

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 |  3341752 |              | mysql            |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)


mysql>slave start;

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.0.117
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 3341752
               Relay_Log_File: mysqld-relay-bin.000006
                Relay_Log_Pos: 251
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: 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: 3341752
              Relay_Log_Space: 3342198
              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)


如上状态表示己成功,下面进行测试:

mysql> create database test_back;
Query OK, 1 row affected (0.04 sec)

从库中同步了刚才的库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| backtest           |
| mysql              |
| test               |
| test_back          |
| zabbix             |
+--------------------+
6 rows in set (0.13 sec)

主从复制成功 ;


注意:

IO 复制连接master主机 把主数据库服务binlog日志里的sql语句
   存放本机的relaybinlog文件里
SQL  执行本机relaybinlog文件里的sql语句,把数据写进本机的数据库里

从数据库上没有主数据库服务器的库和表时 SQL进程会出错

解决方法:

mysql>slave stop;

mysql> change master to

-> master_host=‘master_host_name‘, //主服务器的IP地址

-> master_user=‘replication_user_name‘, //同步数据库的用户

-> master_password=‘replication_password‘, //同步数据库的密码

-> master_log_file=‘recorded_log_file_name‘, //主服务器二进制日志的文件名(前面要求记住的参数)

-> master_log_pos=recorded_log_position; //日志文件的开始位置(前面要求记住的参数)

其中,master_log_file与master_log_pos应该在备份主数据库时记录,通过show master status获取,在从服务器上通过change master to设置这两个参数后,从服务器就会从这个位置开始读取主服务器的二进制日志.使用select maseter_pos_wait() 可以确保从服务器跟上主服务器的日志进度.

本文出自 “Linux_蚂蚁” 博客,请务必保留此出处http://onlyoulinux.blog.51cto.com/7941460/1570472

mysql主从