服务器: TencentOS Server 4 x86_64(CentOS 8)(RHEL,Red Hat Enterprise Linux)
MySQL版本: 8.0.43
SSH客户端: termcc
二台服务器,主节点在南京,从节点在新加坡
安装软件
sudo dnf install phpmyadmin mysql-server httpd修改phpmyadmin配置
/etc/http/conf.d/phpMyAdmin.conf
<Directory /usr/share/phpMyAdmin>
AllowOverride All
Require all granted
</Directory>修改my.cnf
配置文件在/etc/my.cnf
主节点
[mysqld]
server-id=1
log-bin=
binlog-format=row
character_set_server=utf8mb4
secure_file_priv=
log-slave-updates=1
skip-name-resolve
gtid-mode=ON
enforce-gtid-consistency=on
report_host=<主库IP>从节点
[mysqld]
server-id=2
character_set_server=utf8mb4
secure_file_priv=
log-bin=
binlog-format=row
log-slave-updates=1
skip-name-resolve
gtid-mode=ON
enforce-gtid-consistency=on
report_host=<从库IP>启动apache和mysql
systemctl start mysqld #注意是mysqld
systemctl start httpdhttp://ip/phpmyadmin就可以访问了
修改MySQL的root账户密码
默认空密码连接,也就是终端输入mysql就连接上了
phpmyadmin不知道是否支持不输入密码,没有试验,如果不行就进入终端通过下面的语句改密码
alter user root@'localhost' identified with MYSQL_NATIVE_PASSWORD by '新的ROOT密码';主从复制过程
主和从都执行一次SQL语句:
GRANT all on *.* TO 'root'@'%' with grant option;
FLUSH PRIVILEGES;主库执行:
创建用于复制的账号,账号repl,密码repl_password,可以自定义
CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_password';
ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'repl_password';
GRANT all on *.* TO 'repl'@'%' with grant option;
FLUSH PRIVILEGES;在主节点中创建数据库和表,并添加一些测试数据
主库执行:
记录文件名和当前日志位置,如:mysql-copy-master-bin.000001和2451
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;从节点在命令行中依次执行:
将主节点当前数据导出并导入从节点,执行第一条时输入的密码是主节点的,第二条命令的密码是从节点的
mysqldump -h <主库IP> -u root -p --all-databases --source-data=2 --all-databases --triggers --routines --events > alldb.sql
mysql -u root -p < alldb.sql主库:
UNLOCK TABLES;从库执行sql:
主库ip替换掉,文件名和位置在前面步骤中,账号密码是前面主节点创建出来的
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='<主库IP>',
SOURCE_LOG_FILE='记录的binlog文件名',
SOURCE_LOG_POS=记录的binlog位置;
START REPLICA USER='repl' PASSWORD='repl_password'完成!!
从库执行sql:
show replica status;可以查看状态,Replica_IO_Status是Waiting for source to send event表示正常,如果不是则查看Last_IO_Error列的错误内容,自行百度找资料修复。