欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Mysql主从复制,单台服务器上实施

程序员文章站 2022-06-10 14:00:49
...

原文链接:?http://blog.csdn.net/songxixi/article/details/8737555 现在公司向在一台服务器上做主从复制,现在了解到的是需要安装多个mysql不同的服务,才可以,我现在 在现有单实例数据库下,分了不同的端口以下所示红色部分;[root@mysql ~]# netstat -t

原文链接:?http://blog.csdn.net/songxixi/article/details/8737555

现在公司向在一台服务器上做主从复制,现在了解到的是需要安装多个mysql不同的服务,才可以,我现在 在现有单实例数据库下,分了不同的端口以下所示红色部分;
[root@mysql ~]# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:1001                0.0.0.0:*                   LISTEN      2515/rpc.statd      
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      2483/portmap        
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      2750/cupsd          
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      3056/sendmail: acce 
tcp        0      0 :::3306                     :::*                        LISTEN      4025/mysqld         
tcp        0      0 :::3307                     :::*                        LISTEN      17423/mysqld        
tcp        0      0 :::3308                     :::*                        LISTEN      17388/mysqld        
tcp        0      0 :::3309                     :::*                        LISTEN      20371/mysqld        
tcp        0      0 :::22                       :::*                        LISTEN      2741/sshd           
udp        0      0 0.0.0.0:995                 0.0.0.0:*                               2515/rpc.statd      
udp        0      0 0.0.0.0:998                 0.0.0.0:*                               2515/rpc.statd      
udp        0      0 0.0.0.0:42601               0.0.0.0:*                               3204/avahi-daemon:  
udp        0      0 0.0.0.0:5353                0.0.0.0:*                               3204/avahi-daemon:  
udp        0      0 0.0.0.0:111                 0.0.0.0:*                               2483/portmap        
udp        0      0 0.0.0.0:631                 0.0.0.0:*                               2750/cupsd          
udp        0      0 :::5353                     :::*                                    3204/avahi-daemon:  
udp        0      0 :::59254                    :::*                                    3204/avahi-daemon:  
[root@mysql mysql]# mysqld_multi --defaults-extra-file=/etc/mysqld_multi.cnf report
Reporting MySQL servers
MySQL server from group: mysqld2 is running
MySQL server from group: mysqld3 is running
MySQL server from group: mysqld4 is running
[root@mysql mysql]# lsof -i:3308
COMMAND   PID  USER   FD   TYPE DEVICE SIZE NODE NAME
mysqld  17388 mysql   11u  IPv6  45429       TCP *:tns-server (LISTEN)
[root@mysql mysql]# lsof -i:3307
COMMAND   PID  USER   FD   TYPE DEVICE SIZE NODE NAME
mysqld  17423 mysql   11u  IPv6  45479       TCP *psession-prxy (LISTEN)
[root@mysql mysql]# lsof -i:3309
COMMAND   PID  USER   FD   TYPE DEVICE SIZE NODE NAME
mysqld  20371 mysql   11u  IPv6  47851       TCP *:tns-adv (LISTEN)
[root@mysql mysql]# lsof -i:3306
COMMAND  PID  USER   FD   TYPE DEVICE SIZE NODE NAME
mysqld  4025 mysql   11u  IPv6  16575       TCP *:mysql (LISTEN)
[root@mysql mysql]#
[root@mysql ~]# 
在以上服务都启动正常的情况下,配置主从,我没有调整IO的线程,不知道在不同端口见做主从复制关系,以下是我配置最后遇到的错误,请绿林好汉帮忙看看啊,拍砖。。。
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: 192.168.1.10
                  Master_User: slave001
                  Master_Port: 3308
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 1027
               Relay_Log_File: localhost3308-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: No
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           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: 1027
              Relay_Log_Space: 107
              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: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 1593
                Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
1 row in set (0.00 sec)
ERROR: 
No query specified
mysql>
我在mysqld_multi.cnf里面添加了以下红色的,复制内容启动还是报错,请指点哇
[mysqld_multi]
mysqld     = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user       = multi_admin
password   = my_password
[mysqld2]
socket     = /tmp/mysql3307.sock
port       = 3307
pid-file   = /usr/local/mysql/data3307/localhost3307.pid
datadir    = /usr/local/mysql/data3307
#language   = /usr/local/mysql/share/mysql/english
user       = mysql
[mysqld3]
#mysqld     = /path/to/mysqld_safe
#ledir      = /path/to/mysqld-binary/
#mysqladmin = /path/to/mysqladmin
socket     = /tmp/mysql3308.sock
port       = 3308
pid-file   = /usr/local/mysql/data3308/localhost3308.pid
datadir    = /usr/local/mysql/data3308
#language   = /usr/local/mysql/share/mysql/swedish
user       = mysql
master-host = 192.168.1.10
master-user = slave001
master-password = slave001
master-port = 3306
replicate-do-db=test
错误:
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: 192.168.1.10
                  Master_User: slave001
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000018
          Read_Master_Log_Pos: 107
               Relay_Log_File: localhost3308-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000018
             Slave_IO_Running: No
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           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: 107
              Relay_Log_Space: 107
              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: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 1593
                Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
1 row in set (0.00 sec)
哎,经过几个小时的琢磨,终于看到庐山真面目了!以下是成功启动的效果;
[root@mysql ~]# mysqld_multi --defaults-extra-file=/etc/my.cnf report
Reporting MySQL servers
MySQL server from group: mysqld1 is running
MySQL server from group: mysqld2 is running
MySQL server from group: mysqld3 is running
MySQL server from group: mysqld4 is running
[root@mysql ~]# mysqld_multi --defaults-extra-file=/etc/my.cnf report
Reporting MySQL servers
MySQL server from group: mysqld1 is running
MySQL server from group: mysqld2 is running
MySQL server from group: mysqld3 is running
MySQL server from group: mysqld4 is running
[root@mysql ~]# mysqld_multi --defaults-extra-file=/etc/my.cnf report
Reporting MySQL servers
MySQL server from group: mysqld1 is running
MySQL server from group: mysqld2 is running
MySQL server from group: mysqld3 is running
MySQL server from group: mysqld4 is running
[root@mysql ~]# mysqld_multi --defaults-extra-file=/etc/my.cnf report
Reporting MySQL servers
MySQL server from group: mysqld1 is running
MySQL server from group: mysqld2 is running
MySQL server from group: mysqld3 is running
MySQL server from group: mysqld4 is running
[root@mysql ~]#
其实,在我配置muti的时候有些参数没有做好设置,到时server-id服务启动不起来,我把所有的muti的mysqld【1-4】全部放到我们的配置文件内/etc/my.cnf,包括我们的3306端口的实例库,在启动的时候一起跑即可!以下是我my.cnf的配置文件信心,请查阅;
# The following options will be passed to all MySQL clients
[mysqld_multi]
mysqld     = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user       = root
# Here follows entries for some specific programs
# The MySQL server
[mysqld1]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
user=mysql
old_passwords=1
port=3306
skip-name-resolve
server_id=1
log-bin=mysql-bin
max_connections=1000
key_buffer_size=218348
query_cache_size=10
read_rnd_buffer_size=134228
table_cache=10000
tmp_table_size=5362
log-slow-queries=slow.log
long_query_time=1
concurrent_insert=2
thread_cache_size=300
#log=/usr/local/mysql/data/mysql1.log
pid-file=/usr/local/mysql/data/mysql1.pid
log-error=/usr/local/mysql/data/log.1
log-slave-updates
slave-skip-errors=ALL
[mysqld2]
datadir=/usr/local/mysql/data3307
socket=/tmp/mysql3307.sock
user=mysql
old_passwords=1
skip-name-resolve
server_id=222
log-bin=mysql-bin
max_connections=1000
key_buffer_size=218348
query_cache_type=0
read_rnd_buffer_size=1342128
table_cache=10000
tmp_table_size=5368912
log-slow-queries=slow.log
long_query_time=1
concurrent_insert=2
thread_cache_size=300
port=3307
pid-file=/usr/local/mysql/data3307/localhost3307.pid
log-error=/usr/local/mysql/data3307/log.2
[mysqld3]
datadir=/usr/local/mysql/data3308
socket=/tmp/mysql3308.sock
user=mysql
old_passwords=1
skip-name-resolve
server_id=223
log-bin=mysql-bin
max_connections=1000
key_buffer_size=218348
query_cache_type=0
read_rnd_buffer_size=1342128
table_cache=10000
tmp_table_size=5368912
log-slow-queries=slow.log
long_query_time=1
concurrent_insert=2
thread_cache_size=300
port=3308
pid-file=/usr/local/mysql/data3308/localhost3308.pid
log-error=/usr/local/mysql/data3308/log.3
[mysqld4]
datadir=/usr/local/mysql/data3309
socket=/tmp/mysql3309.sock
user=mysql
old_passwords=1
skip-name-resolve
server_id=224
log-bin=mysql-bin
max_connections=1000
key_buffer_size=218348
query_cache_type=0
read_rnd_buffer_size=1342128
table_cache=10000
tmp_table_size=5368912
log-slow-queries=slow.log
long_query_time=1
concurrent_insert=2
thread_cache_size=300
port=3309
pid-file=/usr/local/mysql/data3309/localhost3309.pid
log-error=/usr/local/mysql/data3309/log.4
以上就是配置的启动服务内容,我把server-id分到每个mysqld内部,并保持唯一即可,实现我们要做的单台服务器做主从复制的基本配置要求;配置主从的步骤很简单我就不在这里说了,有不了解如何做主从的可以随时留言即可,以下为我配置成功后主从的启动参数的效果;
mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.0.10
                  Master_User: backup
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000032
          Read_Master_Log_Pos: 893
               Relay_Log_File: localhost3307-relay-bin.000003
                Relay_Log_Pos: 253
        Relay_Master_Log_File: mysql-bin.000032
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           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: 893
              Relay_Log_Space: 1194
              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: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
1 row in set (0.00 sec)
ERROR: 
No query specified
mysql>