MySQL 安装
1. Adding the MySQL Yum Repository
Go to the Download MySQL Yum Repository page (https://dev.mysql.com/downloads/repo/yum/) in the MySQL Developer Zone.
Select and download the release package for your platform.
-
Install the downloaded release package
sudo yum install mysql80-community-release-el7-{version-number}.noarch.rpm
-
check
yum repolist all | grep mysql
2. installation
sudo yum-config-manager --disable mysql57-community
sudo yum-config-manager --enable mysql80-community
sudo yum install mysql-community-server
3. Starting MySQL Server
sudo systemctl start mysqld.service
sudo systemctl status mysqld.service
4. reset password
shell> sudo grep 'temporary password' /var/log/mysqld.log
shell> mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
MySQL 基于事务的 Replication(利用 GTID 实现主从复制)
GTID(全局事务标示符)最初由google实现,在MySQL 5.6中引入.GTID在事务提交时生成,由UUID和事务ID组成.uuid会在第一次启动MySQL时生成,保存在数据目录下的auto .CNF文件里,事务ID则从1开始自增使用GTID的好处主要有两点:
不再需要指定传统复制中的 master_log_files 和 master_log_pos,使主从复制更简单可靠
可以实现基于库的多线程复制,减小主从复制的延迟
1. 主库配置
[mysqld]
log-bin=/var/log/mysql/mysql-bin
server-id=1
gtid_mode=ON
enforce_gtid_consistency=1 # 强制执行GTID一致性。
2. 创建日志目录并赋予权限
shell> mkdir /var/log/mysql
shell> chown mysql.mysql /var/log/mysql
3. 重启服务
shell> systemctl restart mysqld.service
4. 在主服务器创建一个仅具有复制过程权限的单独帐户,以最大程度地降低对其他帐户的危害
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'Www.1.com';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
5. 在主服务器创建一个仅具有all权限的单独帐户,用于从服务器远程拷贝原有的数据
mysql> CREATE USER 'tom'@'%' IDENTIFIED BY 'Www.1.com';
mysql> GRANT ALL ON *.* TO 'tom'@'%';
mysql> flush privileges;
6. 在从服务器上使用刚才的用户进行测试连接
shell> mysql -urepl -p'Www.1.com' -hMASTER_IP
shell> mysql -utom -p'Www.1.com' -hMASTER_IP
7. 配置从服务器 /etc/my.cnf
[mysqld]
server-id=2
gtid_mode=ON
enforce_gtid_consistency=1
# 可选项, 把连接到 master 的信息存到数据库中的表中
master-info-repository=TABLE
relay-log-info-repository=TABLE
8. 重启从服务器
shell> systemctl restart mysqld.service
9. 进入从服务器mysql,执行如下操作
mysql> CHANGE MASTER TO MASTER_HOST='192.168.235.128', MASTER_PORT=3306, MASTER_USER='repl',MASTER_PASSWORD='Www.1.com', master_auto_position=1;
10. 检查是否成功
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.235.128
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 196
Relay_Log_File: localhost-relay-bin.000004
Relay_Log_Pos: 411
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
输出结果中应该看到 I/O 线程和 SQL 线程都是 YES, 就表示成功。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes