【环境介绍】
两台linux服务器(如果是一台,要保证两个mysql都能正常启动),这里以centos6.8版本为例
mysql,使用centos6.8默认的源中的数据库(通过yum install mysql mysql-server -y安装,5.1.73版本)
保证两台服务器能相互通信
【安装步骤】
1、安装mysql数据库
yum install mysql mysql-server -y
2、设置开机启动
chkconfig --levels 2345 mysqld on
3、启动mysql数据库
service mysqld start
4、设置用户名和密码
mysql_secure_installation
【主机配置】
1、登录数据库
进入mysql控制台
mysql -uroot -p
创建数据库
mysql> create database testdb;
授权用户mysqlcopy只能从机这个IP访问主服务器上面的数据库,并且只具有数据库备份的权限
mysql> grant replication slave on *.* to 'mysqlcopy'@'10.241.226.111' identified by 'admin' with grant option;
2、导出主机的数据库内容
在导出之前可以先进入MySQL控制台执行下面命令
数据库只读锁定命令,防止导出数据库的时候有数据写入
mysql> flush tables with read lock;
执行导出命令
mysql> mysqldump -u root -p testdb> /home/testdbbak.sql;
解除锁定
mysql> unlock tables;
3、配置mysql主服务器的my.cnf文件
编辑配置文件,在[mysqld]部分添加下面内容(和[mysqld]挨着)
vi /etc/my.cnf
# 启动MySQ二进制日志系统,注意:如果原来的配置文件中已经有这一行,就不用再添加了。
log_bin=mysql-bin
# 需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
binlog-do-db=testdb
# 不同步mysql系统数据库
binlog-ignore-db=mysql
# 设置服务器id,为1表示主服务器,注意:如果原来的配置文件中已经有这一行,就不用再添加了。
server_id = 1
# 如果这一行已经存在,就不用添加这一行了
socket =/var/lib/mysql/mysql.sock
# 设置编码
character-set-server=utf8
重启MySQL
service mysqld restart
进入mysql控制台
mysql -uroot -p
查看主服务器,出现以下类似信息
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 106 | testdb | mysql |
+------------------+----------+--------------+------------------+
【注意】需要记录file的值:mysql-bin.000001和position的值:106,后面会用到
【从机配置】
1、登录数据库
进入mysql控制台
mysql -uroot -p
创建数据库
mysql> create database testdb;
进入数据库
mysql> user testdb;
导入备份文件到数据库(如果是在两台不同的机器上,需要从主机把文件拷贝到从机上)
mysql> source /home/testdbbak.sql;
测试在从服务器上登录到主服务器
mysql -u mysqlcopy-h10.241.226.110 -p
2、配置mysql从服务器的my.cnf文件
编辑配置文件,在[mysqld]部分添加下面内容(和[mysqld]挨着)
vi /etc/my.cnf
# 启动MySQ二进制日志系统,注意:如果原来的配置文件中已经有这一行,就不用再添加了。
log_bin=mysql-bin
replicate-do-db=testdb
replicate-ignore-db=mysql
read_only=1
# 配置文件中已经有一行server-id=1,修改其值为2,表示为从数据库
server_id = 2
# 如果这一行已经存在了,就不需要这一行了
socket = /var/lib/mysql/mysql.sock
# 设置编码
character-set-server=utf8
重启mysql
service mysqld restart
进入MySQL控制台
mysql -uroot -p
停止slave同步进程
slave stop;
执行同步语句
change master to master_host='192.168.1.155',master_user='mysqlcopy',master_password='admin',master_log_file='mysql-bin.000001',master_log_pos=106;
开启slave同步进程
slave start;
查看slave同步信息,部分内容如下:
SHOW SLAVE STATUS\G
+----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+
| Slave_IO_State | Master_Host | Master_User | Master_Port | Connect_Retry | Master_Log_File | Read_Master_Log_Pos | Relay_Log_File | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table | Last_Errno | Last_Error | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space | Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | Master_SSL_CA_File | Master_SSL_CA_Path | Master_SSL_Cert | Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master | Master_SSL_Verify_Server_Cert | Last_IO_Errno | Last_IO_Error | Last_SQL_Errno | Last_SQL_Error |
+----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+
| Waiting for master to send event | 192.168.1.155 | mysqlcopy | 3306 | 60 | mysql-bin.000001 | 106 | mysqld-relay-bin.000002 | 251 | mysql-bin.000001 | Yes | Yes | testdb | mysql | | | | | 0 | | 0 | 106 | 407 | None | | 0 | No | | | | | | 0 | No | 0 | | 0 | |
+----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+
【注意】查看Slave_IO_Running: Yes Slave_SQL_Running: Yes这两个参数的值,如果都是yes说明配置成功
【主从服务器测试】
1、进入MySQL主服务器
进入主服务器MySQL控制台
mysql -uroot -p
进入数据库
user testdb;
创建test表
CREATE TABLE test ( id int not null,name varchar2(30),gender varchar2(2));
2、进入mysql从服务器
进入MySQL控制台
mysql -uroot -p
进入数据库
use testdb;
显示所有的表
show tables;
显示和主服务器一样的表,说明配置成功
【问题】
1、ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'
解:由于mysql 默认的mysql.sock 是在/var/lib/mysql/mysql.sock,但linux系统总是去/tmp/mysql.sock查找,所以会报错
为mysql.sock增加软连接(相当于windows中的快捷方式)。
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
【参考资料】
http://dev.mysql.com/doc/refman/5.6/en/replication-howto.html
http://www.cnblogs.com/cchun/p/3712637.html