复制实施步骤:
1.确保主从服务器的版本兼容。从服务器至少与主服务器版本相同或更高。
2.确保主服务器上my.cnf文件的[mysqld]部分包括一个log-bin选项。该部分还应有一个server-id=Master_id选项,其中master_id必须为1到232–1之间的一个正整数值。如:
[mysqld]
basedir=/usr/local/mysql
datadir=/data01/mysql
socket=/data01/mysql/mysql.sock
user=mysql
slow_query_log=ON
long_query_time=2
server-id=136
log-bin=/data01/mysqllog/binlog/mysql-bin
binlog_format=MIXED
max_binlog_size = 512M
binlog_cache_size = 128K
character-set-server=utf8
default-storage-engine=INNODB
innodb_file_per_table=1
symbolic-links=0
max_connections=1024
log-error=/var/log/mysql/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
relay-log-purge=1
replicate-ignore-db = mysql
replicate-ignore-db = information_schema
skip-slave-start
relay_log_info_repository = TABLE
master_info_repository = TABLE
relay_log_recovery = 1
sync_relay_log = 1
sync_master_info = 1
innodb_log_buffer_size=8M
innodb_buffer_pool_size=1280M
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
read_only
3.启动主服务器
注意:主服务器需要指定对哪些数据库记录二进制日志,这通过在启动主服务器时,加上
--binlog-do-db= db_name选项来实现。如果要记录多个数据库,要分别为每个数据库指定该选项。
目前主服务器上的启动脚本请使用/data/mysql/bin/startmysql。另外,主机开机后自动启动mysqld的脚本也已经修改。
4.在主服务器上为从服务器建立一个连接帐户,该帐户必须授予REPLICAITON SLAVE权限。
mysql> GRANT REPLICATION SLAVE ON *.*
-> TO '帐号'@'从服务器IP' IDENTIFIED BY '密码';
grant replication slave on *.* to 'backup'@'%' identified by 'kjk7787czcb' with grant option;
GRANT REPLICATION SLAVE,FILE ON *.* TO 'replication'@'10.1.1.%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
5.备份数据库。
导出:
mysqldump -uroot -p'1234567' -R --single-transaction --master-data=2 --all-databases>slave.sql
导入:
mysql -uroot -p'1234567'
如果你的是MYISAM或者既有MYISAM又有INNODB的话就在主服务器上使用如下命令导出服务器的一个快照:
mysqldump -uroot -p --lock-tables --events --triggers --routines --flush-logs --master-data=2 --databases test > db.sql
只有INNODB的话就是用如下命令:
mysqldump -uroot -p --single-transaction --events --triggers --routines --flush-logs --master-data=2 --databases test > db.sql
--single-transaction 这个参数只对innodb适用。
--databases 后面跟除mysql以后的其他所有数据库的库名,我这里只有一个test库。
--master-data 参数会记录导出快照时候的mysql二进制日志位置,一会会用到。
7.在从服务器的my.cnf文件中添加下面的行:
[mysqld]
basedir=/usr/local/mysql
datadir=/data01/mysql
socket=/data01/mysql/mysql.sock
user=mysql
slow_query_log=ON
long_query_time=2
server-id=136
log-bin=/data01/mysqllog/binlog/mysql-bin
binlog_format=MIXED
max_binlog_size = 512M
binlog_cache_size = 128K
character-set-server=utf8
default-storage-engine=INNODB
innodb_file_per_table=1
symbolic-links=0
max_connections=1024
log-error=/var/log/mysql/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
relay-log-purge=1
replicate-ignore-db = mysql
replicate-ignore-db = information_schema
skip-slave-start
relay_log_info_repository = TABLE
master_info_repository = TABLE
relay_log_recovery = 1
sync_relay_log = 1
sync_master_info = 1
innodb_log_buffer_size=8M
innodb_buffer_pool_size=1280M
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
read_only
slave_id值必须为2到232–1之间的一个正整数值。ID值唯一的标识了复制群集中的主从服务器,因此它们必须各不相同。
8.使用--skip-slave-start选项启动从服务器启动从服务器,并导入备份数据库文件。
[root@zjzc02 ~]# mysql -uroot -p'xxx1'
9.在从服务器上执行下面的语句,以系统的实际值替换选项值:
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000009', MASTER_LOG_POS=7463227;
change master to master_host='121.40.147.48',master_user='backup',master_password='xxxxxxx',master_log_file='mysql-bin.000009',master_log_pos=7463227;
10.启动从服务器线程
mysql> START SLAVE;
11.执行上述程序后,从服务器应连接主服务器,并补充自从快照以来发生的任何更新。如果没有正确更新,请检查复制线程状态以及data目录下的.err文件获取信息。