上次给大家介绍了mysql 5.1主从搭建配置教程,这次我们来实现mysql 5.5的主从复制,其实大体上配置是差不多的,只有点细微的差别.
系统:centos 5.x,需要的软件包:mysql-5.5.33.tar.gz
环境准备:服务器a:192.168.10.151 (主),服务器b:192.168.10.152 (从)
1.安装前准备
- wgethttp://mysql.llarian.net/Downloads/MySQL-5.5/mysql-5.5.33.tar.gz
- yum-yinstallgccgcc-c++libtool-libsautoconffreetype-develgdlibjpeg-devel
- libpng-devellibxml2-develncurses-develzlib-develzipunzipcurl-develwgetcrontabs
- filebisoncmakepatchmlocateflexdiffutilsautomakemakekernel-develcpp
- readline-developenssl-develvim-minimalglibc-develglib2-devel
- bzip2-devele2fsprogs-devellibidn-develgettext-develexpat-devel
- libcap-devellibtool-ltdl-develpam-develpcre-devellibmcrypt-devel
2.在服务器a上安装mysql
- tarzxfmysql-5.5.33.tar.gz&&cdmysql-5.5.33
- /usr/sbin/groupaddmysql
- /usr/sbin/useradd-gmysqlmysql
- cmake-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-DMYSQL_UNIX_ADDR=/tmp/mysql.sock-DDEFAULT_CHARSET=utf8-DDEFAULT_COLLATION=utf8_general_ci-DWITH_EXTRA_CHARSETS=complex-DWITH_READLINE=1-DENABLED_LOCAL_INFILE=1
- make
- makeinstall
- chmod+w/usr/local/mysql
- chown-Rmysql:mysql/usr/local/mysql
- cdsupport-files/
- cpmy-medium.cnf/etc/my.cnf
- cp-fmysql.server/etc/rc.d/init.d/mysqld
- mkdir/var/lib/mysql
- /usr/local/mysql/scripts/mysql_install_db--defaults-file=/etc/my.cnf--basedir=/usr/local/mysql--datadir=/var/lib/mysql--user=mysql
- chmod+x/etc/rc.d/init.d/mysqld
- chkconfig--addmysqld
- chkconfigmysqldon
- cat>/etc/ld.so.conf.d/mysql.conf<<EOF
- /usr/local/mysql/lib/mysql
- /usr/local/lib
- EOF
- ldconfig
如果你是在64位机器上的话,那你就执行下面这个命令:
ln -s /usr/local/mysql/lib/mysql /usr/lib64/mysql
如果你是在32位机器上的话,那就执行下面的命令:
ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql
然后再执行:
- ln-s/usr/local/mysql/bin/mysql/usr/bin
- ln-s/usr/local/mysql/bin/mysqladmin/usr/bin
- ln-s/usr/local/mysql/bin/mysqldump/usr/bin
- servicemysqldstart
- mysqladmin-urootpassword'password'
当然如果大家觉得编译安装mysql很麻烦的话,那么可以去看看这篇文章安装mysql5.5二进制包,服务器b安装mysql配置跟服务器a一样,这里就不说了.
3.配置主从,在服务器a上:
- vi/etc/my.cnf
- [mysqld]
- log-bin=master-bin
- log-bin-index=master-bin.index
- server-id=1
- innodb_file_per_table=1
- binlog_format=mixed
授权复制用户:
- mysql-uroot-p
- grantreplicationslaveon*.*to'dbmysql'@'%'identifiedby'123456';
- flushprivileges;
重启mysql:service mysqld restart
在服务器b上:
- vi/etc/my.cnf
- [mysqld]
- relay-log=relay-log
- relay-log-index=relay-log.index
- server-id=2
- innodb_file_per_table=1
- binlog_format=mixed
然后重启mysql:service mysqld restart
服务器b连接连接主服务器并复制,先在服务器a上查看master的状态:
- mysql>showmasterstatus;
- +-------------------+----------+--------------+------------------+
- |File|Position|Binlog_Do_DB|Binlog_Ignore_DB|
- +-------------------+----------+--------------+------------------+
- |master-bin.000001|107|||
- +-------------------+----------+--------------+------------------+
- 1rowinset(0.00sec)
然后在服务器b上进行连接:
- mysql>changemastertomaster_host='192.168.10.151',master_user='dbmysql',maste
- r_password='123456',master_log_file='master-bin.000001',master_log_pos=107;
查看一下slave状态,代码如下:
- mysql>showslavestatusG
- ***************************1.row***************************
- Slave_IO_State:
- Master_Host:192.168.10.151
- Master_User:dbmysql
- Master_Port:3306
- Connect_Retry:60
- Master_Log_File:master-bin.000001
- Read_Master_Log_Pos:107
- Relay_Log_File:localhost-relay-bin.000001
- Relay_Log_Pos:4
- Relay_Master_Log_File:master-bin.000001
- Slave_IO_Running:No
- Slave_SQL_Running:No
- 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:0
- Last_IO_Error:
- Last_SQL_Errno:0
- Last_SQL_Error:--phpfensi.com
- Replicate_Ignore_Server_Ids:
- Master_Server_Id:0
- 1rowinset(0.00sec)
启动slave再查看:
- mysql>startslave;
- QueryOK,0rowsaffected(0.01sec)
- mysql>showslavestatusG
- ***************************1.row***************************
- Slave_IO_State:Connectingtomaster
- Master_Host:192.168.10.151
- Master_User:dbmysql
- Master_Port:3306
- Connect_Retry:60
- Master_Log_File:master-bin.000001
- Read_Master_Log_Pos:107
- Relay_Log_File:localhost-relay-bin.000001
- Relay_Log_Pos:4
- Relay_Master_Log_File:master-bin.000001
- Slave_IO_Running:Connecting
- 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:2003
- Last_IO_Error:errorconnectingtomaster'dbmysql@192.168.10.151:3306'-retry-time:60retries:86400
- Last_SQL_Errno:0
- Last_SQL_Error:
- Replicate_Ignore_Server_Ids:
- Master_Server_Id:0
- 1rowinset(0.00sec)
看到上面错误了没,说明mysql主和从服务器的防火墙没有开放3306端口,去服务器a和服务器b上把3306端口打开,再来查看mysql从的状态,代码如下:
- mysql>showslavestatusG
- ***************************1.row***************************
- Slave_IO_State:Waitingformastertosendevent
- Master_Host:192.168.10.151
- Master_User:dbmysql
- Master_Port:3306
- Connect_Retry:60
- Master_Log_File:master-bin.000001
- Read_Master_Log_Pos:107
- Relay_Log_File:relay-log.000011
- Relay_Log_Pos:254
- Relay_Master_Log_File:master-bin.000001
- 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:107
- Relay_Log_Space:404
- 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
- 1rowinset(0.00sec)
好了,可以看到Slave_IO_Running和Slave_SQL_Running都是yes了,下面也没有error提示了.
4.验证,在mysql主上创建个数据库.
mysql> create database emlog;
Query OK, 1 row affected (0.01 sec)
再在mysql从上查看是否有这个数据库,代码如下:
- mysql>showdatabases;
- +--------------------+
- |Database|
- +--------------------+
- |information_schema|
- |emlog|
- |mysql|
- |performance_schema|
- |test|
- +--------------------+
- 5rowsinset(0.02sec)
可以看到已经同步复制过来了,mysql主从搭建成功.