一主一从配置 or 一主多从:
1)确保主从服务器上安装了相同版本的数据库。因为复制的功能在持续的改进中,所
以在可能的情况下推荐安装最新的稳定版本。
2)在主服务器上,设置一个复制使用的账户,并
授予 REPLICATION SLAVE 权限。
--在这里如果报错:
ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value ? 则需要在my.cnf 或者my.init上配置参数:
sql-mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
修改为
sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
然后重启MYSQL。
3)修改
主数据库服务器的配置文件 my.cnf,开
启 BINLOG,并设置 server-id 的值。这
两个参数的修改需要重新启动数据库服务才可以生效。
my.cnf 配置:
[mysqld]
log-bin = /home/mysql/log/mysql-bin.log -->必须开启。
server-id = 1 -->这个值手动设置,每个节点唯一。
binlog-ignore-db=mysql
read_only=TURE (read_only=1)
4)在主服务器上,设置读锁定有效,这个操作是为了确保没有数据库操作,以便获得
一个一致性的快照:
mysql> flush tables with read lock;
5) 然后得到主服务器上当前的二进制日志名和偏移量值。 这个操作的目的是为了在从
数据库启动以后,从这个点开始进行数据的恢复。 -->( 一个是file 编号,一个是
position 值
)
mysql> show master status;
+------------------+----------+--------------+------------------+
|
File | Position
| Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
|
mysql-bin.000039
|
102
| | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
6)备份主库上的数据文件到 备库中,如果是使用mysqdump 最好一个库一个库备份。 也可以直接在操作系统下 cp 全部的数据文件到从数据库服务器上,也可以通过
mysqldump 导出数据或者使用 ibbackup 工具进行数据库的备份。
7)
主数据库的备份完毕后,主数据库可以恢复写操作,剩下的操作只需要在从服务器
上执行:
mysql> unlock tables;
8)将主数据库的一致性备份恢复到从数据库上。
9)修改从数据库的配置文件 my.cnf,增加 server-id 参数。注意 server-id 的值必须是
唯一的,不能和主数据库的配置相同,如果有多个从数据库服务器,每个从数据库服务器必
须有自己唯一的 server-id 值。
这里备库1 配置:
my.cnf 中修改:
[mysqld]
server-id = 2
10)在从服务器上,使用--skip-slave-start 选项启动从数据库,这样不会立即启动从数
据库服务上的复制进程,方便我们对从数据库的服务进行进一步的配置:
[mysql@master1 ]$ ./bin/mysqld_safe --skip-slave-start & 或者: shell# /etc/init.d/mysqld start --skip-slave-start
11)对从数据库服务器做相应设置,指定复制使用的用户,主数据库服务器的 IP、端 口以及开始执行复制的日志文件和位置等,具体语法如下:
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name', -->主机host(IP)
-> MASTER_USER='replication_user_name', -->复制的用户user( 如果是主从从,指定的复制用户必须不同)
-> MASTER_PASSWORD='replication_password', -->复制用户的密码
-> MASTER_LOG_FILE='recorded_log_file_name', -->对应第5步的 file 编号。
-> MASTER_LOG_POS=recorded_log_position, -->对应的POS编号
-> MASTER_PORT=3308;
12)在从服务器上,启动 slave 线程:
mysql> start slave;
13)这时 slave 上执行 show processlist 命令将显示类似如下进程:
mysql> show processlist \G
14)
查看master 进程状态: mysql > show master status \G
主要查看: Slave_IO_Running 和 Slave_SQL_Running 是否都为YES
==> 如果是一主多从 一样配置。
mysql 从服务器切换为主服务器:
步骤如下:
1 确认从服务器已经完成所有同步操作:
stop slave io_thread
show processlist
直到看到状态都为:xxx has read all relay log 表示更新都执行完毕
2 停止从服务器slave服务
stop slave
3 将从服务器切换为主服务器:
reset master
完成切换。
PS: 如果从服务器设置了 read only 选项,则需要将这个参数去掉并重新启动数据库。