单机

安装

1
2
3
4
5
6
wget 'https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm'
sudo yum -y install mysql-community-server
systemctl start mysqld
systemctl status mysqld
sudo grep 'temporary password' /var/log/mysqld.log
mysql -uroot -p  #输入查看到的密码

配置

  • vim /etc/my.cnf
    1
    2
    3
    4
    5
    6
    7
    8
    
    [client]
    default-character-set = utf8
    [mysqld]
    default-storage-engine = INNODB
    character-set-server = utf8
    collation-server = utf8_general_ci #不区分大小写
    collation-server =  utf8_bin #区分大小写
    collation-server = utf8_unicode_ci #比 utf8_general_ci 更准确
    

授权任何主机连接

1
2
3
mysql -u 用户名 -p
GRANT ALL PRIVILEGES ON *.- TO '用户名'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
FLUSH PRIVILEGES;

集群

安装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#关防火墙
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.38-1.el7.x86_64.rpm-bundle.tar
tar xvf mysql-5.7.38-1.el7.x86_64.rpm-bundle.tar

yum install libncurses* -y

# 移除已有的 MariaDB libs
yum -y remove mariadb-libs

# 安装 MySQL rpm
rpm -ivh mysql-community-common-5.7*.rpm
rpm -ivh mysql-community-libs-5.7*.rpm
rpm -ivh mysql-community-devel-5.7*.rpm
rpm -ivh mysql-community-client-5.7*.rpm
rpm -ivh mysql-community-server-5.7*.rpm

systemctl start mysqld
grep 'temporary password' /var/log/mysqld.log

mysql -uroot -p
mysql> ALTER USER USER() IDENTIFIED BY 'Password123@mysql';

集群节点设置(主/主)

添加复制用户及权限,在 MySQL-1 节点上创建用于复制数据的用户 clusteruser,授权 MySQL-2 节点访问,在 MySQL-2 节点上创建用于复制数据的用户 clusteruser,授权 MySQL-1 节点访问

1
2
3
4
5
6
7
8
9
# 开启 root 用户远程访问
mysql> grant all privileges on *.* to 'root'@'%' identified by 'Password123@mysql';
# 添加 MySQL 主从复制⽤户 clusteruser,并授权 MySQL-2 节点可访问 MySQL-1 节点
mysql> grant replication slave,file on *.* to 'clusteruser'@'2/1节点IP' identified by 'Replication@123';
# 刷新授权
mysql> flush privileges;

我们在 1/2节点上添加一个复制账户 'clusteruser',允许 '2/1节点IP' 客户端来访问,密码为 'Replication@123'如果有多个从服务器需要共享这一个复制账号,可以使用 '10.1.11.%' 来替代整个网段。

修改集群配置文件

将 /etc/my.cnf 文件内容修改如下,MySQL-2 节点修改server-id=102auto_increment_offset=2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[mysqld]
datadir=/var/lib/mysql
default-storage-engine=INNODB
character_set_server=utf8
lower_case_table_names=1
table_open_cache=128
max_connections=2000
max_connect_errors=6000
innodb_file_per_table=1
innodb_buffer_pool_size=1G
max_allowed_packet=64M
transaction_isolation=READ-COMMITTED
innodb_flush_method=O_DIRECT
innodb_flush_log_at_trx_commit=0
sync_binlog=0
innodb_lock_wait_timeout=1800
bind-address=0.0.0.0
group_concat_max_len=1024000
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
skip-name-resolve

server-id=101
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=1
expire_logs_days=30

[mysql]
default-character-set=utf8

[mysql.server]
default-character-set=utf8

配置完成后重启 MySQL 服务: systemctl restart mysqld

配置 MySQL 主从关系

分别登录到 MySQL 的两个节点上,配置相互的主从关系。

获取各节点状态信息 到各节点上获取节点状态信息:

1
2
3
4
5
6
mysql -uroot -p'Password123@mysql'

mysql> flush tables with read lock\G
Query OK, 0 rows affected (0.00 sec)

mysql> show master status;

可以获取到 ‘File’ 和 ‘Position’ 两个值,用于设置主从关系。

配置主从关系

在各个节点上执行以下命令:

1
2
3
4
5
6
7
8
9
mysql> change master to master_host='2/1节点IP', master_user='clusteruser', master_password='Replication@123', master_log_file='2/1节点File', master_log_pos=2/1节点Position;
mysql> start slave;
mysql> show slave status\G
提示:master_host 为 2/1节点的 IP,master_log_file 为 2/1节点上查询到的 "File" 值,master_log_pos 为 2/1节点上查询到的 "Position" 值。
"show slave status\G" 命令执行结果中,查询到 Slave_IO_Running 和 Slave_SQL_Running 都为 Yes 则表明配置成功。

最后执行 MySQL 命令解锁:

mysql> UNLOCK TABLES;

创建数据库

配置好主主节点后,登录到任意节点

1
2
3
4
mysql> CREATE DATABASE `testdb` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

在另一个节点上,用 MySQL 命令可以同样查看到新建的数据库:
mysql> show databases;