如何在Ubuntu 14上创建MySQL主从集群
时间:2020-01-09 10:39:03 来源:igfitidea点击:
服务器配置
本教程中将引用以下配置,以使其易于遵循。
主机名 | 角色 | 公用IP | 专用IP |
---|---|---|---|
mysql01. theitroad.local | 主服务器 | 64.54.200.32 | 10.2.0.15 |
mysql02. theitroad.local | 从属服务器 | 64.54.200.33 | 10.2.0.16 |
安装MySQL
- 更新本地程序包数据库缓存。
sudo apt-get update
- 安装MySQL服务器。
sudo apt-get install mysql-server
- 在安装过程中提示时,设置MySQL服务器的Root帐户密码。确保它复杂且难以猜测。
配置主服务器
主服务器是唯一允许写入的数据库服务器。这是为了确保整个群集(在我们的情况下只有三个服务器)中的数据一致性。我们将要使该服务器比从属服务器更强大。
准备要复制的服务器
MySQL的默认安装不允许主从复制。我们需要配置一些启用复制的选项。
- 在文本编辑器中打开MySQL Server配置。
- 在配置文件的[mysqld]部分下,找到bind-address选项。取消注释,并将其值更改为将与应用程序和其他MySQL服务器通信的IP地址。我们可以输入0.0.0.0作为IP地址以允许在任何接口上进行通信,但是,这可能不太安全。在本教程中,我们希望所有通信都通过我们的专用网络进行。
bind-address = 10.2.0.15
- 同样在[mysqld]部分下,找到以下几行:
#server-id = 0 #log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 10 max_binlog_size = 100M #binlog_do_db = include_database_name #binlog_ignore_db = include_database_name
- 取消注释服务器ID行,并将其值更改为1. 此外,也取消注释log_bin行。
server-id = 1 log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 10 max_binlog_size = 100M #binlog_do_db = include_database_name #binlog_ignore_db = include_database_name
- 保存更改并退出文本编辑器。
- 重新启动MySQL使更改生效。
sudo service mysql restart
创建复制用户帐户
从属服务器将需要一个用户帐户,该帐户允许它们从主服务器请求副本数据。此帐户应有权访问要复制到从属服务器的任何数据库。
- 登录到MySQL Server控制台。
mysql -u root -p
- 出现提示时,输入MySQL的Root帐户密码。
- 创建用户帐户。
CREATE USER 'repl'@'%.example.com' IDENTIFIED BY 'supersecretpassword';
- 向用户帐户授予复制权限。
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.example.com';
- 刷新特权表并应用更改。
FLUSH PRIVILEGES;
获取主信息
从属可以开始从数据库中复制数据之前,他们需要了解记录更改的主服务器的日志文件以及最新更改在日志文件中的位置。在主服务器上执行以下操作。
- 获取主服务器的当前状态。
show master status
- 输出应类似于此示例。
mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 107 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
- 记录文件值和位置值。
- 退出MySQL控制台。
配置从站
准备复制
在每个从属服务器上使用以下说明。
- 在文本编辑器中打开MySQL Server配置。
- 在配置文件的[mysqld]部分下,找到bind-address选项。取消注释,并将其值更改为将与应用程序和其他MySQL服务器通信的IP地址。
bind-address = 10.2.0.16
- 同样在[mysqld]部分下,找到以下几行:
#server-id = 0 #log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 10 max_binlog_size = 100M #binlog_do_db = include_database_name #binlog_ignore_db = include_database_name
- 取消注释服务器ID行并更改其值。每个添加到集群中的MySQL服务器都应将该值加1. 由于1是为我们的主服务器保留的,因此第二台服务器将使用ID 2. 另外,取消注释log_bin行。
server-id = 2 log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 10 max_binlog_size = 100M #binlog_do_db = include_database_name #binlog_ignore_db = include_database_name
- 保存更改并退出文本编辑器。
- 重新启动MySQL使更改生效。
sudo service mysql restart
启用复制
- 登录到MySQL控制台。
mysql -u root -p
- 配置与主服务器的连接。
CHANGE MASTER TO MASTER_HOST='mysql01.theitroad.intra', MASTER_USER='repl1', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=107;
- 启动从属服务器以启用复制。
START SLAVE;