Mac 系统下源码编译安装 MySQL

目录

写在最前:

一、千锤百炼 Boost 库

二、编译安装 MySQL

1、创建自己的目录,放置安装包

2、解压

3、编译、安装

4、变更所属组、用户

5、创建多实例数据、日志等文件存放路径

6、初始化各个实例 [ 初始化完成后会自带随机密码在输出日志中 ]

7、各实例开启SSL连接(可选)

三、配置 MySQL 配置文件 

1、多实例

2、单实例

四、复制实例脚本到服务管理目录下

1、多实例

2、单实例

五、查看实例状态,启动

1、多实例

2、单实例

六、初次连接并修改密码

1、添加 mysql 到 /bin 目录

2、初次启动

3、修改 root 密码

4、再次登录

5、higo_test 用户访问

七、MySQL 状态操作

1、多实例操作

2、单实例操作


写在最前:

清理干净系统 MySQL 相关(参考命令 ➡️ sudo find / -name mysql | sudo xargs rm -rf  , ➡️ sudo find / -name my.cnf | sudo xargs rm -rf)

下载正确的 Mac 环境 MySQL 源码编译包:http://ftp.ntu.edu.tw/pub/MySQL/Downloads/ (选择你想要的版本,下载 mysql-boost-.... 的安装包

我所选择的为:mysql-boost-5.7.28.tar.gz(有没有发现不同❓暂时留给你思考的空间,后续会详细介绍)

一、千锤百炼 Boost 库

Boost 库是一个经过千锤百炼、可移植、提供源代码的 C++ 库,作为标准库的后备,是 C++ 标准化进程的发动机之一。

MySQL 源码编译安装必须用到 Boost 库,但是 Mac 环境无法直接下载如 boost_1_59_0.tar.bz2 解压后直接使用,所以在 Mac 环境源码安装必须选择集成的如 mysql-boost-5.7.28.tar.gz 的安装包。

二、编译安装 MySQL

1、创建自己的目录,放置安装包

➡️ mkdir -p /data/soft

➡️ cd /data/soft

将 mysql-boost-5.7.28.tar.gz 下载到 /data/soft 下

2、解压

➡️ sudo chmod 755 mysql-boost-5.7.28.tar.gz

➡️ tar -zxvf mysql-boost-5.7.28.tar.gz

3、编译、安装

➡️ cd mysql-5.7.28

注意 cmake 各参数配置,根据自己的需求修改

➡️ cmake  -DCMAKE_INSTALL_PREFIX=/data/mysql-5.7.28  -DMYSQL_DATADIR=/data/mysql-5.7.28/data  -DSYSCONFDIR==/data/mysql-5.7.28/etc  -DWITH_INNOBASE_STORAGE_ENGINE=1  -DWITH_MYISAM_STORAGE_ENGINE=1  -DMYSQL_UNIX_ADDR=/data/mysql-5.7.28/etc/mysql.sock  -DWITH_INNOBASE_STORAGE_ENGINE=1  -DWITH_MEMORY_STORAGE_ENGINE=1  -DDEFAULT_COLLATION=utf8mb4_general_ci  -DWITH_READLINE=1  -DMYSQL_TCP_PORT=3306  -DENABLED_LOCAL_INFILE=1  -DWITH_PARTITION_STORAGE_ENGINE=1  -DEXTRA_CHARSETS=all  -DDEFAULT_CHARSET=utf8mb4  -DENABLE_DOWNLOADS=1  -DWITH_BOOST=/data/soft/mysql-5.7.28/boost

➡️ make

➡️ make install

4、变更所属组、用户

➡️ sudo chown -R _mysql:_mysql /data/mysql-5.7.28

5、创建多实例数据、日志等文件存放路径

➡️ mkdir -p /data/mysql5.7.28data/mysql3701

➡️ mkdir -p /data/mysql5.7.28data/mysql3702

➡️ mkdir -p /data/mysql5.7.28log/mysql3701/binlogs

➡️ mkdir -p /data/mysql5.7.28log/mysql3702/binlogs

➡️ mkdir -p /data/mysql5.7.28log/mysql3701/relaylogs

➡️ mkdir -p /data/mysql5.7.28log/mysql3702/relaylogs

➡️ sudo chown -R _mysql:_mysql /data/mysql5.7.28data

➡️ sudo chown -R _mysql:_mysql /data/mysql5.7.28log

6、初始化各个实例 [ 初始化完成后会自带随机密码在输出日志中 ]

注意:根据自己需求创建多个实例,单实例只需要创建一个就可以了,上面一步同理

➡️ sudo /data/mysql-5.7.28/bin/mysqld --initialize --user=mysql --basedir=/data/mysql-5.7.28/ --datadir=/data/mysql5.7.28data/mysql3701/data

2019-12-20T11:00:07.220085Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-12-20T11:00:07.222175Z 0 [Warning] Setting lower_case_table_names=2 because file system for /data/mysql5.7.28data/mysql3701/data/ is case insensitive
2019-12-20T11:00:07.393494Z 0 [Warning] InnoDB: New log files created, LSN=45790
2019-12-20T11:00:07.417464Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2019-12-20T11:00:07.479358Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: e23879a4-2317-11ea-8b07-0cb8742042ec.
2019-12-20T11:00:07.487274Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2019-12-20T11:00:07.636956Z 0 [Warning] CA certificate ca.pem is self signed.
2019-12-20T11:00:07.671545Z 1 [Note] A temporary password is generated for root@localhost: KwTan?>t.4gL

➡️ sudo /data/mysql-5.7.28/bin/mysqld --initialize --user=mysql --basedir=/data/mysql-5.7.28/ --datadir=/data/mysql5.7.28data/mysql3702/data

2019-12-20T09:14:10.885872Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-12-20T09:14:10.887862Z 0 [Warning] Setting lower_case_table_names=2 because file system for /data/mysql5.7.28data/mysql3702/data/ is case insensitive
2019-12-20T09:14:11.059201Z 0 [Warning] InnoDB: New log files created, LSN=45790
2019-12-20T09:14:11.083293Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2019-12-20T09:14:11.144489Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 158cbf22-2309-11ea-9bc2-37e4d0668c8b.
2019-12-20T09:14:11.151677Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2019-12-20T09:14:11.466291Z 0 [Warning] CA certificate ca.pem is self signed.
2019-12-20T09:14:11.495391Z 1 [Note] A temporary password is generated for root@localhost: QOgSBE7w(kQu

7、各实例开启SSL连接(可选)

➡️ /data/mysql-5.7.28/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/data/mysql-5.7.28/ --datadir=/data/mysql5.7.28data/mysql3701/data

➡️ /data/mysql-5.7.28/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/data/mysql-5.7.28/ --datadir=/data/mysql5.7.28data/mysql3702/data

三、配置 MySQL 配置文件 

➡️ sudo vim /etc/my.cnf

1、多实例

[client]
default-character-set = utf8mb4
port=3306
socket=/data/mysql-5.7.28/etc/mysql.sock
[mysqldump]
quick
max_allowed_packet = 16M
 
 
[mysqld]
port = 3306
server-id=11370
user=mysql
socket=/data/mysql-5.7.28/etc/mysql.sock
 
sync_binlog = 1
innodb_old_blocks_time = 1000
innodb_flush_method = O_DIRECT
back_log = 1000
report_host=172.18.4.181
 
basedir = /data/mysql-5.7.28
table_open_cache = 13684
skip-character-set-client-handshake
binlog_cache_size=32M
query_cache_limit = 2M
 
max_connections = 13684
max_user_connections = 13684
query_cache_size = 256M
query_cache_type = 0
log_queries_not_using_indexes = 1
min_examined_row_limit =100000
 
key_buffer_size = 1M
read_buffer_size = 1M
sort_buffer_size = 1M
# write_buffer = 2M
 
max_allowed_packet = 64M
max_connect_errors = 1000000
# net_buffer_length = 8K
# read_rnd_buffer_size = 16M
 
event_scheduler = 1
lower_case_table_names = 1
# general_log= on
 
binlog_format = 'ROW'
log-error=/data/mysql5.7.28log/mysqld-5.7-err.log
slow_query_log = on
slow-query-log-file = /data/mysql5.7.28log/slow.log
long_query_time = 1
expire_logs_days = 30
 
connect_timeout = 300
wait_timeout = 300
interactive_timeout = 300
join_buffer_size = 8M
thread_cache_size = 512
thread_stack = 256K
tmp_table_size = 256M
max_heap_table_size = 256M
bulk_insert_buffer_size = 64M
 
# innodb_autoextend_increment = 256
# innodb_data_file_path=ibdata1:12M:autoextend
innodb_buffer_pool_instances = 8
innodb_read_io_threads = 8
innodb_write_io_threads = 4
innodb_thread_concurrency = 80
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 96M
innodb_log_file_size = 10G
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 80
innodb_lock_wait_timeout = 120
innodb_file_per_table = 1
# skip_networking = ON
# query_cache_min_res_unit = 4K
log_timestamps=SYSTEM
sql_mode='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
 
[mysqld3701]
port = 3701
server-id=330603701
user=mysql
socket=/data/mysql5.7.28data/mysql3701/mysql.sock
pid-file=/data/mysql5.7.28data/mysql3701/mysqld.pid
datadir=/data/mysql5.7.28data/mysql3701/data/
innodb_data_home_dir=/data/mysql5.7.28data/mysql3701/data/
innodb_log_group_home_dir=/data/mysql5.7.28data/mysql3701/data/
innodb_buffer_pool_size = 1G
log_bin = /data/mysql5.7.28log/mysql3701/binlogs/log_bin
relay_log=/data/mysql5.7.28log/mysql3701/relaylogs/relay-bin
character_set_server = utf8mb4
#跳过mysql程序起动时的字符参数设置 ,使用服务器端字符集设置
skip_character_set_client_handshake = 1
collation_server = utf8mb4_bin
init_connect = 'SET NAMES utf8mb4'
group_concat_max_len=102400
bind_address = 0.0.0.0
skip-name-resolve = 0
 
[mysqld3702]
port = 3702
server-id=330603702
user=mysql
socket=/data/mysql5.7.28data/mysql3702/mysql.sock
pid-file=/data/mysql5.7.28data/mysql3702/mysqld.pid
datadir=/data/mysql5.7.28data/mysql3702/data/
innodb_data_home_dir=/data/mysql5.7.28data/mysql3702/data/
innodb_log_group_home_dir=/data/mysql5.7.28data/mysql3702/data/
innodb_buffer_pool_size = 1G
log_bin = /data/mysql5.7.28log/mysql3702/binlogs/log_bin
relay_log=/data/mysql5.7.28log/mysql3702/relaylogs/relay-bin
character_set_server = utf8mb4
#跳过mysql程序起动时的字符参数设置 ,使用服务器端字符集设置
skip_character_set_client_handshake = 1
collation_server = utf8mb4_bin
init_connect = 'SET NAMES utf8mb4'
group_concat_max_len=102400
bind_address = 0.0.0.0
skip-name-resolve = 0
 
[mysqld_multi]
mysqld=/data/mysql-5.7.28/bin/mysqld_safe
mysqladmin=/data/mysql-5.7.28/bin/mysqladmin
log=/data/mysql5.7.28log/mysql_multi.log

2、单实例

[mysqldump]
quick
max_allowed_packet = 16M
 
[mysqld]
port = 3701
server-id=330603701
user=mysql
socket=/data/mysql5.7.28data/mysql3701/mysql.sock
pid-file=/data/mysql5.7.28data/mysql3701/mysqld.pid
datadir=/data/mysql5.7.28data/mysql3701/data/
innodb_data_home_dir=/data/mysql5.7.28data/mysql3701/data/
innodb_log_group_home_dir=/data/mysql5.7.28data/mysql3701/data/
innodb_buffer_pool_size = 1G
log_bin = /data/mysql5.7.28log/mysql3701/binlogs/log_bin
relay_log=/data/mysql5.7.28log/mysql3701/relaylogs/relay-bin
character_set_server = utf8mb4
#跳过mysql程序起动时的字符参数设置 ,使用服务器端字符集设置
skip_character_set_client_handshake = 1
collation_server = utf8mb4_bin
init_connect = 'SET NAMES utf8mb4'
group_concat_max_len=10240
bind_address = 0.0.0.0
skip-name-resolve = 0
 
sync_binlog = 1
innodb_old_blocks_time = 1000
innodb_flush_method = O_DIRECT
back_log = 1000
report_host=172.18.4.181
 
basedir = /data/mysql-5.7.28
table_open_cache = 13684
skip-character-set-client-handshake
binlog_cache_size=32M
query_cache_limit = 2M
 
max_connections = 13684
max_user_connections = 13684
query_cache_size = 256M
query_cache_type = 0
log_queries_not_using_indexes = 1
min_examined_row_limit =100000
 
key_buffer_size = 1M
read_buffer_size = 1M
sort_buffer_size = 1M
# write_buffer = 2M
 
max_allowed_packet = 64M
max_connect_errors = 1000000
# net_buffer_length = 8K
# read_rnd_buffer_size = 16M
 
event_scheduler = 1
lower_case_table_names = 1
# general_log= on
 
binlog_format = 'ROW'
log-error=/data/mysql5.7.28log/mysqld-5.7-err.log
slow_query_log = on
slow-query-log-file = /data/mysql5.7.28log/slow.log
long_query_time = 1
expire_logs_days = 30
 
connect_timeout = 300
wait_timeout = 300
interactive_timeout = 300
join_buffer_size = 8M
thread_cache_size = 512
thread_stack = 256K
tmp_table_size = 256M
max_heap_table_size = 256M
bulk_insert_buffer_size = 64M
 
# innodb_autoextend_increment = 256
# innodb_data_file_path=ibdata1:12M:autoextend
innodb_buffer_pool_instances = 8
innodb_read_io_threads = 8
innodb_write_io_threads = 4
innodb_thread_concurrency = 80
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 96M
innodb_log_file_size = 1G
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 80
innodb_lock_wait_timeout = 120
innodb_file_per_table = 1
# skip_networking = ON
# query_cache_min_res_unit = 4K
log_timestamps=SYSTEM
sql_mode='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

四、复制实例脚本到服务管理目录下

1、多实例

➡️ sudo mkdir -p /usr/local/mysql/bin/

➡️ sudo cp /data/mysql-5.7.28/support-files/mysqld_multi.server /usr/local/mysql/bin/mysqld_multi

➡️ sudo chmod +x /usr/local/mysql/bin/mysqld_multi

2、单实例

➡️ sudo mkdir -p /usr/local/mysql/bin/

➡️ sudo cp /data/mysql-5.7.28/support-files/mysql.server /usr/local/mysql/bin/mysql.server

➡️ sudo chmod +x  /usr/local/mysql/bin/mysql.server

五、查看实例状态,启动

小知识:MySQL 启动时会读取配置文件 my.cnf,读取次序依次为 /etc/my.cnf、/etc/mysql/my.cnf、/usr/local/etc/my.cnf、~

1、多实例

Usage: /usr/local/mysql/bin/mysqld_multi {start|stop|report|restart}

查看状态 ➡️  /usr/local/mysql/bin/mysqld_multi report

启动 ➡️  /usr/local/mysql/bin/mysqld_multi start 3701

2、单实例

Usage: /usr/local/mysql/bin/mysql.server  {start|stop|restart|reload|force-reload|status}  [ MySQL server options ]

启动 ➡️ sudo /usr/local/mysql/bin/mysql.server start

查看状态 ➡️ sudo /usr/local/mysql/bin/mysql.server status

六、初次连接并修改密码

1、添加 mysql 到 /bin 目录

➡️ sudo cp /data/mysql-5.7.28/bin/mysql /bin

2、初次启动

注意,初始化时生成的初始密码为 'root'@'localhost' 密码,所以第一次必须 sudo 

➡️ sudo mysql -S /data/mysql5.7.28data/mysql3701/mysql.sock -p'KwTan?>t.4gL'

mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.28-log

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

3、修改 root 密码

当然才不会告诉你真正的 root 密码 O(∩_∩)O哈哈~

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('Wu3306@fEi2025');
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'Wu3306@fEi2025' WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye

4、再次登录

➡️ mysql -h127.0.0.1 -P3701 -uroot -p'Wu3306@fEi2025'

mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.28-log Source distribution

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

mysql> select user,host from mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| root | 127.0.0.1 |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
4 rows in set (0.00 sec)

【创建其它用户连接账号】

mysql> GRANT ALL PRIVILEGES ON *.* TO 'wufei_test'@'%' identified by 'wufei9ijnmko0test';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> select user,host from mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| wufei_test | % |
| root | 127.0.0.1 |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
5 rows in set (0.00 sec)

5、higo_test 用户访问

➡️ mysql -h127.0.0.1 -P3701 -uwufei_test -pwufei9ijnmko0test

➡️ mysql -h172.18.4.181 -P3701 -uwufei_test -pwufei9ijnmko0test

七、MySQL 状态操作

1、多实例操作

Usage: /usr/local/mysql/bin/mysqld_multi {start|stop|report|restart}

查看状态 ➡️  /usr/local/mysql/bin/mysqld_multi report

启动 ➡️  /usr/local/mysql/bin/mysqld_multi start 3701

停止 ➡️  /usr/local/mysql/bin/mysqld_multi stop 3701--password=Wu3306@fEi2025

......

2、单实例操作

Usage: /usr/local/mysql/bin/mysql.server  {start|stop|restart|reload|force-reload|status}  [ MySQL server options ]

查看状态 ➡️ sudo /usr/local/mysql/bin/mysql.server status

启动 ➡️ sudo /usr/local/mysql/bin/mysql.server start

停止 ➡️ sudo /usr/local/mysql/bin/mysql.server stop

......

猜你喜欢

转载自blog.csdn.net/weixin_42018518/article/details/103639172
今日推荐