官方地址:https://www.mysql.com/support/supportedplatforms/database.html
3306实例的目录规划
/data/mysql |___3306 <== 以实例的端口来命名 |___data # 里面存放3306实例的数据 |___etc # 里面存放3306实例的配置文件 |___script # 里面存放3306实例的启停脚本 |___run # 里面存放3306实例的pid和socket文件 |___logs # 里面存放相关的日志 |__errlog # 里面存放错误日志 |__binlog # 里面存放binlog日志 |__relaylog # 里面存放中继日志(单实例虽然用不着,但也规划好) |__slowlog # 里面存放慢查询日志3307实例的目录规划
/data/mysql |___3307 <== 以实例的端口来命名 |___data # 里面存放3306实例的数据 |___etc # 里面存放3306实例的配置文件 |___script # 里面存放3306实例的启停脚本 |___run # 里面存放3306实例的pid和socket文件 |___logs # 里面存放相关的日志 |__errlog # 里面存放错误日志 |__binlog # 里面存放binlog日志 |__relaylog # 里面存放中继日志(单实例虽然用不着,但也规划好) |__slowlog # 里面存放慢查询日志这里指的程序是MySQL Community Server软件包,而不是指客户端程序包、库程序包等。
在第2章我已经部署好了MySQL server程序,这里只要初始化一个3306实例出来。
创建实例的相关目录(在第1章中规划好了的)
mkdir -p /data/mysql/3306/{data,etc,script,run,logs} ls -ld /data/mysql/3306/{data,etc,script,run,logs} mkdir -p /data/mysql/3306/logs/{errlog,binlog,relaylog,slowlog} ls -ld /data/mysql/3306/logs/{errlog,binlog,relaylog,slowlog}配置3306实例的配置文件
#### 进入到/data/mysql/3306/etc目录下 cd /data/mysql/3306/etc pwd #### 配置3306实例的配置文件 cat >>my.cnf<<EOF [mysqld] ######## Basic Parameter server_id=21 user=mysql port=3306 basedir=/data/apps/mysql datadir=/data/mysql/3306/data socket=/data/mysql/3306/run/mysql.sock pid_file=/data/mysql/3306/run/mysql.pid character_set_server=utf8 skip_character_set_client_handshake=1 lower_case_table_names=1 ####Gtid replication gtid_mode=on enforce_gtid_consistency=1 binlog_gtid_simple_recovery=1 ######## Other Parameter skip_external_locking=on skip_name_resolve=on max_connections=800 max_connect_errors=1000 wait_timeout=1800 interactive_timeout=1800 max_allowed_packet=2048M ######## Ordinary Log ## log output mode and time log_output=FILE log_timestamps=system ## errlog log_error=/data/mysql/3306/logs/errlog/21_mysql_error.log ## binlog log_bin=/data/mysql/3306/logs/binlog/21_mysql_bin log_bin_index=/data/mysql/3306/logs/binlog/21_mysql_bin.index binlog_row_image=full binlog_rows_query_log_events=on binlog_format=row expire_logs_days=60 max_binlog_size=2G binlog_cache_size=16M sync_binlog=1 log_bin_trust_function_creators=1 ## slowlog slow_query_log=on slow_query_log_file=/data/mysql/3306/logs/slowlog/21_mysql_slow.log long_query_time=10 log_queries_not_using_indexes=on log_throttle_queries_not_using_indexes=10 log_slow_admin_statements=1 log_slow_slave_statements=1 ######## InnoDB Engine ## buffer pool default_storage_engine=innodb innodb_buffer_pool_size=1G innodb_buffer_pool_instances=8 innodb_buffer_pool_chunk_size=128M innodb_change_buffering=all innodb_change_buffer_max_size=25 innodb_buffer_pool_dump_at_shutdown=1 innodb_buffer_pool_dump_pct=40 innodb_buffer_pool_load_at_startup=1 ## sql mode and transaction group_concat_max_len=4294967295 explicit_defaults_for_timestamp=1 sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' innodb_strict_mode=1 autocommit=on transaction_isolation=READ-COMMITTED transaction_write_set_extraction=OFF ## log buffer and redo log file innodb_flush_method=O_DIRECT innodb_log_buffer_size=16M innodb_flush_log_at_trx_commit=1 innodb_log_files_in_group=2 innodb_log_file_size=2G ## double write innodb_doublewrite=off ## table space innodb_data_file_path=ibdata1:5G;ibdata2:5G;ibdata3:5G:autoextend:max:20G innodb_autoextend_increment=64 innodb_temp_data_file_path=ibtmp1:5G:autoextend:max:20G innodb_file_per_table=1 ## undo table innodb_undo_tablespaces=3 innodb_undo_logs=128 innodb_undo_log_truncate=1 innodb_max_undo_log_size=20G innodb_purge_rseg_truncate_frequency=128 EOF编写3306实例的启停脚本
#### 进入到/data/mysql/3306/script目录下 cd /data/mysql/3306/script/ pwd #### 编写3306实例的启动脚本 01:先vim mysqld后,按字母i进入到编辑模式; 02:到 https://blog.csdn.net/weixin_43733154/article/details/104577640 博客复制脚本内容 03:将复制的内存粘贴到mysqld文件中,按esc后,输入:wq保存退出 #### 更改启动脚本的权限 cd /data/mysql/3306/script/ ll mysqld chmod 700 mysqld ll mysqld #### 说明,脚本里面有个User变量和Pass变量 User=shut # 用户shut@localhost,后面要在实例中创建,权限shutdown *.* 密码chenliang Pass=chenliang # 这个是shut@localhost用户的密码初始化3306实例
#### 更改相关目录的属主/组为mysql chown -R mysql:mysql /data/mysql/3306/ ls -ld /data/mysql/3306/ #### 初始化3306实例 mysqld --defaults-file=/data/mysql/3306/etc/my.cnf --user=mysql --basedir=/data/apps/mysql \ --datadir=/data/mysql/3306/data/ --initialize PS:参数说明: --defaults-file # 指定实例的配置文件,会读取[mysqld]选项下的参数,若与命令指定的冲突,以命令行的参数为准; --user # 指定用哪个用户来运行mysql,在操作系统得存在,得有权限读取相关文件(配置文件、文件),其实我my.cnf中的[mysqld]下有配置 --basedir # 指定mysql程序的安装路径,我配置文件my.cnf中[mysqld]选项下也有配置。 --datadir # 指定mysql实例的数据目录,我配置文件my.cnf中[mysqld]选项下也有配置。 --initialize # 创建默认库成功后退出,并且设置root@localhost用户的初始密码,密码保存在error日志中,初次登录时你得输入它,当连接后会强制你 # 更改超级用户的初始密码。 其实之条命令可以简写成: mysqld --defaults-file=/data/mysql/3306/etc/my.cnf --initialize 那么你的my.cnf中[mysqld]下得配置user参数、basedir参数、datadir参数 PS:扩展说明: 我想初始出默认的库,但不想让root@localhost用户有初始密码。我应该怎么做? 第一种: 将 --initialize 替换成 --initialize-insecure 第二种: --initialize 和 --initialize-insecure 可以同时存在,不分先后顺序 这样:你启动Mysql后,用root@localhost连接时会向你要密码,你直接回车,进到mysql实例后是可以做任何操作的。这时我们应该为其设置密码,不设置的话就 是你人有问题了。 ## 检查是否有错误 可以看/data/mysql/3306/logs/errlog/21_mysql_error.log,只要没有error就ok启动mysql 3306实例
/data/mysql/3306/script/mysqld start sleep 5 netstat -lntup|grep 3306更改超级用户的密码和创建用于停止服务的用户
#### 从错误日志中过滤出初始时随机生成的默认密码,我在my.cnf中配置了错误日志,若没配置,则错误日志在datadir变量指定的目录下 [root@node21 ~]# grep -i "password" /data/mysql/3306/logs/errlog/21_mysql_error.log 2020-06-06T15:05:00.511315+08:00 1 [Note] A temporary password is generated for root@localhost: YmGiq79IAr>j #### 登录3306实例更改root@localhost用户的密码和创建用于停止服务的用户shut@localhost [root@node21 ~]# mysql -uroot -p -S /data/mysql/3306/run/mysql.sock Enter password: <== 这里输入的密码是 YmGiq79IAr>j mysql> mysql> alter user 'root'@'localhost' identified by "chenliang"; # 修改超级用户的密码 Query OK, 0 rows affected (0.00 sec) mysql> mysql> create user 'shut'@'localhost' identified by "chenliang"; # 创建shut@localhost用户并设密码 Query OK, 0 rows affected (0.00 sec) mysql> mysql> grant shutdown on *.* to 'shut'@'localhost'; # 为shut@localhost用户进行授权 Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> mysql> flush privileges; # 刷新权限 Query OK, 0 rows affected (0.00 sec) mysql> mysql> exit # 退出登录 Bye前面用脚本启动了3306实例后,并连接到实例修改了超级用户root@localhost的密码,又创建了shut@localhost用户、设置密码、授权。这里停止3306实例主要是测试3306实例的启停脚本是否能够正常停止3306实例。然后再启动3306实例。
#### 当前状态 [root@node21 ~]# netstat -lntup|grep 3306 tcp6 0 0 :::3306 :::* LISTEN 2517/mysqld #### 停止3306实例 [root@node21 ~]# /data/mysql/3306/script/mysqld stop Stop MySQL[3306] [ 确定 ] [root@node21 ~]# netstat -lntup|grep 3306 [root@node21 ~]# #### 再启动3306实例 [root@node21 ~]# /data/mysql/3306/script/mysqld start Start MySQL [3306] [ 确定 ] [root@node21 ~]# netstat -lntup|grep 3306 tcp6 0 0 :::3306 :::* LISTEN 3532/mysqld这里创建一个管理员的用户,这个用户的是为我自己创建的,它对3306实例下所有库下的对象具备all权限(包含了很多的权限),同时具备给其它用户进行权限管理的权限。
mysql -uroot -pchenliang -S /data/mysql/3306/run/mysql.sock create user 'chenliang'@'%' identified by "chenliang"; select user,host,authentication_string from mysql.user where user="chenliang" and host="%"; grant all on *.* to 'chenliang'@'%' with grant option; show grants for 'chenliang'@'%'; flush privileges; exit这里用SQLyog客户端工具通过chenliang@%帐号去连接3306实例。我的PC机能够和服务器(vmware workstation上创建的虚拟机10.0.0.21)通信的。
在第2章我已经部署好了MySQL server程序,这里要初始化一个3307实例出来。
创建实例的相关目录(在第1章中规划好了的)
mkdir -p /data/mysql/3307/{data,etc,script,run,logs} ls -ld /data/mysql/3307/{data,etc,script,run,logs} mkdir -p /data/mysql/3307/logs/{errlog,binlog,relaylog,slowlog} ls -ld /data/mysql/3307/logs/{errlog,binlog,relaylog,slowlog}配置3307实例的配置文件
#### 进入到/data/mysql/3307/etc目录下 cd /data/mysql/3307/etc pwd #### 配置3306实例的配置文件 cat >>my.cnf<<EOF [mysqld] ######## Basic Parameter server_id=21 user=mysql port=3307 basedir=/data/apps/mysql datadir=/data/mysql/3307/data socket=/data/mysql/3307/run/mysql.sock pid_file=/data/mysql/3307/run/mysql.pid character_set_server=utf8 skip_character_set_client_handshake=1 lower_case_table_names=1 ####Gtid replication gtid_mode=on enforce_gtid_consistency=1 binlog_gtid_simple_recovery=1 ######## Other Parameter skip_external_locking=on skip_name_resolve=on max_connections=800 max_connect_errors=1000 wait_timeout=1800 interactive_timeout=1800 max_allowed_packet=2048M ######## Ordinary Log ## log output mode and time log_output=FILE log_timestamps=system ## errlog log_error=/data/mysql/3307/logs/errlog/21_mysql_error.log ## binlog log_bin=/data/mysql/3307/logs/binlog/21_mysql_bin log_bin_index=/data/mysql/3307/logs/binlog/21_mysql_bin.index binlog_row_image=full binlog_rows_query_log_events=on binlog_format=row expire_logs_days=60 max_binlog_size=2G binlog_cache_size=16M sync_binlog=1 log_bin_trust_function_creators=1 ## slowlog slow_query_log=on slow_query_log_file=/data/mysql/3307/logs/slowlog/21_mysql_slow.log long_query_time=10 log_queries_not_using_indexes=on log_throttle_queries_not_using_indexes=10 log_slow_admin_statements=1 log_slow_slave_statements=1 ######## InnoDB Engine ## buffer pool default_storage_engine=innodb innodb_buffer_pool_size=1G innodb_buffer_pool_instances=8 innodb_buffer_pool_chunk_size=128M innodb_change_buffering=all innodb_change_buffer_max_size=25 innodb_buffer_pool_dump_at_shutdown=1 innodb_buffer_pool_dump_pct=40 innodb_buffer_pool_load_at_startup=1 ## sql mode and transaction group_concat_max_len=4294967295 explicit_defaults_for_timestamp=1 sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' innodb_strict_mode=1 autocommit=on transaction_isolation=READ-COMMITTED transaction_write_set_extraction=OFF ## log buffer and redo log file innodb_flush_method=O_DIRECT innodb_log_buffer_size=16M innodb_flush_log_at_trx_commit=1 innodb_log_files_in_group=2 innodb_log_file_size=2G ## double write innodb_doublewrite=off ## table space innodb_data_file_path=ibdata1:5G;ibdata2:5G;ibdata3:5G:autoextend:max:20G innodb_autoextend_increment=64 innodb_temp_data_file_path=ibtmp1:5G:autoextend:max:20G innodb_file_per_table=1 ## undo table innodb_undo_tablespaces=3 innodb_undo_logs=128 innodb_undo_log_truncate=1 innodb_max_undo_log_size=20G innodb_purge_rseg_truncate_frequency=128 EOF编写3307实例的启停脚本
#### 进入到/data/mysql/3307/script目录下 cd /data/mysql/3307/script/ pwd #### 编写3307实例的启动脚本 01:先vim mysqld后,按字母i进入到编辑模式; 02:到 https://blog.csdn.net/weixin_43733154/article/details/104577640 博客复制脚本内容 03:将复制的内存粘贴到mysqld文件中,按esc后,输入:wq保存退出 04:最重要的是要替换一些内容,使用的命令如下所示: sed -i 's#3306#3307#g' /data/mysql/3307/script/mysqld #### 更改启动脚本的权限 cd /data/mysql/3307/script/ ll mysqld chmod 700 mysqld ll mysqld #### 说明,脚本里面有个User变量和Pass变量 User=shut # 用户shut@localhost,后面要在实例中创建,权限shutdown *.* 密码chenliang Pass=chenliang # 这个是shut@localhost用户的密码初始化3307实例
#### 更改相关目录的属主/组为mysql chown -R mysql:mysql /data/mysql/3307/ ls -ld /data/mysql/3307/ #### 初始化3307实例 mysqld --defaults-file=/data/mysql/3307/etc/my.cnf --user=mysql --basedir=/data/apps/mysql \ --datadir=/data/mysql/3307/data/ --initialize PS:参数说明: --defaults-file # 指定实例的配置文件,会读取[mysqld]选项下的参数,若与命令指定的冲突,以命令行的参数为准; --user # 指定用哪个用户来运行mysql,在操作系统得存在,得有权限读取相关文件(配置文件、文件),其实我my.cnf中的[mysqld]下有配置 --basedir # 指定mysql程序的安装路径,我配置文件my.cnf中[mysqld]选项下也有配置。 --datadir # 指定mysql实例的数据目录,我配置文件my.cnf中[mysqld]选项下也有配置。 --initialize # 创建默认库成功后退出,并且设置root@localhost用户的初始密码,密码保存在error日志中,初次登录时你得输入它,当连接后会强制你 # 更改超级用户的初始密码。 其实之条命令可以简写成: mysqld --defaults-file=/data/mysql/3307/etc/my.cnf --initialize 那么你的my.cnf中[mysqld]下得配置user参数、basedir参数、datadir参数 PS:扩展说明: 我想初始出默认的库,但不想让root@localhost用户有初始密码。我应该怎么做? 第一种: 将 --initialize 替换成 --initialize-insecure 第二种: --initialize 和 --initialize-insecure 可以同时存在,不分先后顺序 这样:你启动Mysql后,用root@localhost连接时会向你要密码,你直接回车,进到mysql实例后是可以做任何操作的。这时我们应该为其设置密码,不设置的话就 是你人有问题了。 ## 检查是否有错误 可以看/data/mysql/3307/logs/errlog/21_mysql_error.log,只要没有error就ok启动mysql 3307实例
/data/mysql/3307/script/mysqld start sleep 5 netstat -lntup|grep 3307更改超级用户的密码和创建用于停止服务的用户
#### 从错误日志中过滤出初始时随机生成的默认密码,我在my.cnf中配置了错误日志,若没配置,则错误日志在datadir变量指定的目录下 [root@node21 ~]# grep -i "password" /data/mysql/3307/logs/errlog/21_mysql_error.log 2020-06-06T15:05:00.511315+08:00 1 [Note] A temporary password is generated for root@localhost: -ytKkt/aN9J; #### 登录3306实例更改root@localhost用户的密码和创建用于停止服务的用户shut@localhost [root@node21 ~]# mysql -uroot -p -S /data/mysql/3307/run/mysql.sock Enter password: <== 这里输入的密码是 -ytKkt/aN9J; mysql> mysql> alter user 'root'@'localhost' identified by "chenliang"; # 修改超级用户的密码 Query OK, 0 rows affected (0.00 sec) mysql> mysql> create user 'shut'@'localhost' identified by "chenliang"; # 创建shut@localhost用户并设密码 Query OK, 0 rows affected (0.00 sec) mysql> mysql> grant shutdown on *.* to 'shut'@'localhost'; # 为shut@localhost用户进行授权 Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> mysql> flush privileges; # 刷新权限 Query OK, 0 rows affected (0.00 sec) mysql> mysql> exit # 退出登录 Bye前面用脚本启动了3307实例后,并连接到实例修改了超级用户root@localhost的密码,又创建了shut@localhost用户、设置密码、授权。这里停止3307实例主要是测试3307实例的启停脚本是否能够正常停止3307实例。然后再启动3307实例。
#### 当前状态 [root@node21 ~]# netstat -lntup|grep 3307 tcp6 0 0 :::3307 :::* LISTEN 2577/mysqld #### 停止3307实例 [root@node21 ~]# /data/mysql/3307/script/mysqld stop Stop MySQL[3307] [ 确定 ] [root@node21 ~]# netstat -lntup|grep 3307 [root@node21 ~]# #### 再启动3307实例 [root@node21 ~]# /data/mysql/3307/script/mysqld start Start MySQL [3307] [ 确定 ] [root@node21 ~]# netstat -lntup|grep 3307 tcp6 0 0 :::3307 :::* LISTEN 3562/mysqld这里创建一个管理员的用户,这个用户的是为我自己创建的,它对3307实例下所有库下的对象具备all权限(包含了很多的权限),同时具备给其它用户进行权限管理的权限。
mysql -uroot -pchenliang -S /data/mysql/3307/run/mysql.sock create user 'chenliang'@'%' identified by "chenliang"; select user,host,authentication_string from mysql.user where user="chenliang" and host="%"; grant all on *.* to 'chenliang'@'%' with grant option; show grants for 'chenliang'@'%'; flush privileges; exit这里用SQLyog客户端工具通过chenliang@%帐号去连接3307实例。我的PC机能够和服务器(vmware workstation上创建的虚拟机10.0.0.21)通信的。