准备mysql 一主一从 主从同步结构
数据读写分离
把客户端查询数据的请求和写入数据的请求分发给不同的数据库服务器处理
select insert/update/delete
实现数据读写分离的方法
人肉分离:执行select sql命令时 访问数据库服务器 192.168.1.54
执行insert sql命令时 访问数据库服务器 192.168.4.52
select: mysql -h192.168.4.54 -u用户名 -p密码
insert: mysql -h192.168.4.52 -u用户名 -p密码
代理服务(接收客户端访问数据库服务器的请求)
通过第三方软件提供的服务 实现数据读写分离
mysql中间件 mysql-proxy mycat maxscale
client
select/insert: mysql -hproxy_ip -u用户名 -p密码
mysql> select
mysql> insert
mysql> grant replication slave on *.* to slaveuser@"%" identified by "123453";
mysql> show slave status;
修改配置文件
[root@host53 ~]# vim /etc/maxscale.cnf
[maxscale]
threads=1
[server1] // 定义数据库服务器主机名
type=server
address=192.168.4.52 //master 主机 ip 地址
port=3306
protocol=MySQLBackend
[server2] // 定义数据库服务器
type=server
address=192.168.4.54 //slave 主机 ip 地址
port=3306
protocol=MySQLBackend
[MySQL Monitor] // 定义要监视的数据库服务器
type=monitor
module=mysqlmon
servers=server1,server2 // 定义的主、从数据库服务器主机名
user=scalemon // 用户名
passwd=123453 // 密码
monitor_interval=10000
#[Read-Only Service] //定义只读数据库服务器
#type=service
#router=readconnroute
#servers=server1
#user=myuser
#passwd=mypwd
#router_options=slave
[Read-Write Service] // 定义实现读写分离的数据库服务器
type=service
router=readwritesplit
servers=server1,server2 // 定义的主、从数据库服务器主机名
user=maxscale // 用户名
passwd=123453// 密码
max_slave_connections=100%
75 [MaxAdmin Service] //定义管理服务
76 type=service
77 router=cli
85 [Read-Only Listener] //定义只读服务端口号
86 type=listener
87 service=Read-Only Service
88 protocol=MySQLClient
89 port=4008
97 [MaxAdmin Listener]
98 type=listener
99 service=MaxAdmin Service
100 protocol=maxscaled
101 socket=default
port=4019
[root@host53 mysql]# sed -i '/#/d' /etc/maxscale.cnf 删除文件中的所有带#的行
根据配置文件做相应的设置在数据库服务器上添加用户scalemon和maxscale
创建监控用户scalemon:
监控数据库服务器时,连接数据库服务器的用户
mysql> grant replication slave, replication client on *.* to scalemon@'%' identified by "123453";
创建路由用户maxscale:
验证 访问数据时,连接数据库服务器使用的用户,是否在数据库服务器上存在的,连接用户
mysql> grant select on mysql.* to maxscale@'%' identified by "123453";
查看授权用户
mysql> select user,host from mysql.user where user in ("scalemon","maxscale");
+----------+------+
| user | host |
+----------+------+
| maxscale | % |
| scalemon | % |
+----------+------+
启动服务
[root@host53 ~]# maxscale -f /etc/maxscale.cnf
查看服务进程和端口
查看端口
[root@host53 ~]# netstat -utnlp | grep :4006
tcp6 0 0 :::4006 :::* LISTEN 29688/maxscale
[root@host53 ~]#
[root@host53 ~]# netstat -utnlp | grep :4019
tcp6 0 0 :::4019 :::* LISTEN 29688/maxscale
[root@host53 ~]#
查看进程
[root@host53 ~]# ps -C maxscale
PID TTY TIME CMD
29688 ? 00:00:00 maxscale
[root@host53 ~]#
停止服务
[root@host53 ~]# ps -C maxscale
PID TTY TIME CMD
29688 ? 00:00:00 maxscale
[root@host53 ~]# kill -9 29688
[root@host53 ~]#
[root@host53 ~]#
[root@host53 ~]# kill -9 29688
-bash: kill: (29688) - 进程不存在
2.2.3 测试配置
A 在本机访问管理管端口查看监控状态
[root@host53 ~]# maxadmin -P4019 -uadmin -pmariadb
MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.4.51 | 3306 | 0 | Master, Running
server2 | 192.168.4.52 | 3306 | 0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
MaxScale> exit
[root@host53 ~]#
b 客户端访问数据读写分离服务器
]#which mysql
]# mysql -h192.168.4.53 -P4006 -uwebuser -p123453
mysql> select @@hostname;
mysql> 执行插入或查询 ( 在51 和 52 本机查看记录)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2.2 配置mysql多实例
要求:在主机192.168.4.53配置mysql多实例:
运行2个数据库服务
第1个数据库服务 数据库目录 /dataone
服务端口号 3307
sock文件 /dataone/mysqld.sock
日志文件 /dataone/mysqld.log
第2个数据库服务
数据库目录 /datatow
服务端口号 3308
sock文件 /datatwo/mysqld.sock
日志文件 /datatwo/mysqld.log
1 环境准备
netstat -utnalp | grep :3307
netstat -utnalp | grep :3308
2 安装提供多实例服务的, mysql数据库服务软件
[root@host53 ~]# mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql
[root@host53 ~]#
[root@host53 ~]# ls /usr/local/mysql/
bin COPYING docs include lib man README share support-files
[root@host53 ~]# ls /usr/local/mysql/bin/
innochecksum mysqladmin mysqld_multi mysqlpump mysqlxtest
lz4_decompress mysqlbinlog mysqld_safe mysql_secure_installation perror
myisamchk mysqlcheck mysqldump mysqlshow replace
myisam_ftdump mysql_client_test_embedded mysqldumpslow mysqlslap resolveip
myisamlog mysql_config mysql_embedded mysql_ssl_rsa_setup
resolve_stack_dump
myisampack mysql_config_editor mysqlimport mysqltest_embedded
zlib_decompress
my_print_defaults mysqld mysql_install_db mysql_tzinfo_to_sql
mysql mysqld-debug mysql_plugin mysql_upgrade
[root@host53 ~]#
[root@host53 ~]# echo "export PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile
[root@host53 ~]# source /etc/profile
[root@host53 ~]# echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
配置多实例
装包
tar -zxf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
移动改名
rm -rf /var/lib/mysql
mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql
[root@host53 ~]# ls /usr/local/mysql/
bin COPYING docs include lib man README share support-files
[root@host53 ~]# ls /usr/local/mysql/bin/
innochecksum mysqladmin mysqld_multi mysqlpump mysqlxtest
lz4_decompress mysqlbinlog mysqld_safe mysql_secure_installation perror
myisamchk mysqlcheck mysqldump mysqlshow replace
myisam_ftdump mysql_client_test_embedded mysqldumpslow mysqlslap resolveip
myisamlog mysql_config mysql_embedded mysql_ssl_rsa_setup
resolve_stack_dump
myisampack mysql_config_editor mysqlimport mysqltest_embedded
zlib_decompress
my_print_defaults mysqld mysql_install_db mysql_tzinfo_to_sql
mysql mysqld-debug mysql_plugin mysql_upgrade
[root@host53 ~]# echo "export PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile
[root@host53 ~]# source /etc/profile
[root@host53 ~]# echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
编辑配置文件
]# rm -rf /etc/my.cnf
]#vim /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin user = root
[mysqld1]
port=3307
datadir=/dataone
socket=/dataone/mysqld.sock
log-error=/dataone/mysqld.log
pid-file=/dataone/mysqld.pid
[mysqld2]
port=3308
datadir=/datatwo
socket=/datatwo/mysqld.sock
log-error=/datatwo/mysqld.log
pid-file=/datatwo/mysqld.pid
:wq
4 根据配置文件的设置,做相应的配置
4.1创建数据库目录
4.2创建进程运行的所有者和组 mysql
[root@host53 ~]# mkdir -p /dataone
[root@host53 ~]# mkdir -p /datatwo
[root@host53 ~]# useradd mysql
c[root@host53 ~]# chown mysql:mysql /data*
4.3 初始化授权库
]#mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/dataone --initialize
2018-05-05T08:47:48.992696Z 1 [Note] A temporary password is generated for root@localhost:
bXk.5j!pjto#
[root@host53 ~]# ls /dataone/
auto.cnf ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1 mysql performance_schema sys
]#mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/datatwo --initialize
2018-05-05T08:50:09.429934Z 1 [Note] A temporary password is generated for root@localhost:
bKsaf+xzk0V3
[root@host53 ~]# ls /datatwo/
auto.cnf ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1 mysql performance_schema sys
[root@host53 ~]#
5 启动多实例服务
[root@host53 ~]# mysqld_multi start 1
[root@host53 ~]# mysqld_multi start 2
[root@host53 ~]# netstat -utnlp | grep :3308
tcp6 0 0 :::3308 :::* LISTEN 1153/mysqld
[root@host53 ~]# netstat -utnlp | grep :3307
tcp6 0 0 :::3307 :::* LISTEN 927/mysqld
[root@host53 ~]#
6 访问多实例服务
连接实例服务1
[root@host53 ~]#mysql -uroot -p'bXk.5j!pjto#' -S /dataone/mysqld.sock
mysql> ALTER USER user() identified by "123453";
mysql> quit;
]# mysql -uroot -p123453 -S /dataone/mysqld.sock
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql>
连接实例服务2
[root@host53 ~]#mysql -uroot -p'bKsaf+xzk0V3' -S /datatwo/mysqld.sock
mysql> alter user user() identified by "123453";
Query OK, 0 rows affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> quit
Bye
[root@host53 ~]# mysql -uroot -p123453 -S /datatwo/mysqld.sock
停止启动的实例服务
]# mysqld_multi --user=root --password=密码 stop 实例编号
[root@host53 ~]# netstat -utnlp | grep :3307
tcp6 0 0 :::3307 :::* LISTEN 927/mysqld
[root@host53 ~]#
[root@host53 ~]#
[root@host53 ~]# netstat -utnlp | grep :3308
tcp6 0 0 :::3308 :::* LISTEN 1153/mysqld
[root@host53 ~]#
[root@host53 ~]# mysqld_multi --user=root --password=123453 stop 1
[root@host53 ~]#
[root@host53 ~]# netstat -utnlp | grep :3307
[root@host53 ~]#
[root@host53 ~]# netstat -utnlp | grep :3308
tcp6 0 0 :::3308 :::* LISTEN 1153/mysqld
[root@host53 ~]#
[root@host53 ~]#
[root@host53 ~]#
[root@host53 ~]# mysqld_multi --user=root --password=123453 stop 2
[root@host53 ~]# netstat -utnlp | grep :3308
[root@host53 ~]# mysql -uroot -p123453 -S /datatwo/mysqld.sock
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/datatwo/mysqld.sock' (2)
[root@host53 ~]#
+++++++++++++++++++++++++++++++++++++++++++++++
三、mysql优化
程序员编写的对数据访问的sql命令复杂,导致数据库服务处理的,启用mysql服务的慢查询日志,记录超过指定时间查询结果的sql命令
错误日志 记录启动 / 运行 / 停止过程中的错误消息 log-error[=name]
查询日志 记录客户端连接和查询操作 general-log general-log-file=
慢查询日志 记录耗时较长或不使用索引的查询操作 slow-query-log slow-query-log-file= long-query-time=
slow-query-log 启用慢查询
slow-query-log-file 指定慢查询日志文件
long-query-time 超过指定秒数(默认 10秒)的查询才被记录
log-queries-not-using-indexes 记录未使用索引的查询
启用慢查询日志
vim /etc/my.cnf
[mysqld]
slow-query-loglong-query-time=2
log-queries-not-using-indexes
:wq
]# systemctl restart mysqld
]# mysql -uroot -p123453
mysql> select sleep(3);
mysql> select sleep(5);
查看日志文件内容
]# cat /var/lib/mysql/主机名-slow.log
统计日志文件记录信息
~]# mysqldumpslow /var/lib/mysql/db55-slow.log > /tmp/sql.txt
启用查询日志
vim /etc/my.cnf
[mysqld]
general-log
]# systemctl restart mysqld
]# cat /var/lib/mysql/db55.log
mysql> show variables like "query_cache%"; 查询缓存
+------------------------------+---------+
| Variable_name | Value |
+------------------------------+---------+
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 1048576 |
| query_cache_type | OFF |
| query_cache_wlock_invalidate | OFF |
+------------------------------+---------+
query_cache_wlock_invalidate | OFF 查询缓存结果有效 对myisam存储引擎的表有效,控制脏读
mysql> show global status like "qcache%";
+-------------------------+---------+
| Variable_name | Value |
+-------------------------+---------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 1031832 |
| Qcache_hits | 0 | 记录在查询缓存里查找的数据的次数
| Qcache_inserts | 0 | 记录数据库服务器接受查询请求的次数
| Qcache_lowmem_prunes | 0 | 记录清除查询缓存空间里数据的次数
| Qcache_not_cached | 1 |
| Qcache_queries_in_cache | 0 |
| Qcache_total_blocks | 1 |
+-------------------------+---------+
数据读写分离
把客户端查询数据的请求和写入数据的请求分发给不同的数据库服务器处理
select insert/update/delete
实现数据读写分离的方法
人肉分离:执行select sql命令时 访问数据库服务器 192.168.1.54
执行insert sql命令时 访问数据库服务器 192.168.4.52
select: mysql -h192.168.4.54 -u用户名 -p密码
insert: mysql -h192.168.4.52 -u用户名 -p密码
代理服务(接收客户端访问数据库服务器的请求)
通过第三方软件提供的服务 实现数据读写分离
mysql中间件 mysql-proxy mycat maxscale
client
select/insert: mysql -hproxy_ip -u用户名 -p密码
mysql> select
mysql> insert
mysql> grant replication slave on *.* to slaveuser@"%" identified by "123453";
mysql> show slave status;
修改配置文件
[root@host53 ~]# vim /etc/maxscale.cnf
[maxscale]
threads=1
[server1] // 定义数据库服务器主机名
type=server
address=192.168.4.52 //master 主机 ip 地址
port=3306
protocol=MySQLBackend
[server2] // 定义数据库服务器
type=server
address=192.168.4.54 //slave 主机 ip 地址
port=3306
protocol=MySQLBackend
[MySQL Monitor] // 定义要监视的数据库服务器
type=monitor
module=mysqlmon
servers=server1,server2 // 定义的主、从数据库服务器主机名
user=scalemon // 用户名
passwd=123453 // 密码
monitor_interval=10000
#[Read-Only Service] //定义只读数据库服务器
#type=service
#router=readconnroute
#servers=server1
#user=myuser
#passwd=mypwd
#router_options=slave
[Read-Write Service] // 定义实现读写分离的数据库服务器
type=service
router=readwritesplit
servers=server1,server2 // 定义的主、从数据库服务器主机名
user=maxscale // 用户名
passwd=123453// 密码
max_slave_connections=100%
75 [MaxAdmin Service] //定义管理服务
76 type=service
77 router=cli
85 [Read-Only Listener] //定义只读服务端口号
86 type=listener
87 service=Read-Only Service
88 protocol=MySQLClient
89 port=4008
97 [MaxAdmin Listener]
98 type=listener
99 service=MaxAdmin Service
100 protocol=maxscaled
101 socket=default
port=4019
[root@host53 mysql]# sed -i '/#/d' /etc/maxscale.cnf 删除文件中的所有带#的行
根据配置文件做相应的设置在数据库服务器上添加用户scalemon和maxscale
创建监控用户scalemon:
监控数据库服务器时,连接数据库服务器的用户
mysql> grant replication slave, replication client on *.* to scalemon@'%' identified by "123453";
创建路由用户maxscale:
验证 访问数据时,连接数据库服务器使用的用户,是否在数据库服务器上存在的,连接用户
mysql> grant select on mysql.* to maxscale@'%' identified by "123453";
查看授权用户
mysql> select user,host from mysql.user where user in ("scalemon","maxscale");
+----------+------+
| user | host |
+----------+------+
| maxscale | % |
| scalemon | % |
+----------+------+
启动服务
[root@host53 ~]# maxscale -f /etc/maxscale.cnf
查看服务进程和端口
查看端口
[root@host53 ~]# netstat -utnlp | grep :4006
tcp6 0 0 :::4006 :::* LISTEN 29688/maxscale
[root@host53 ~]#
[root@host53 ~]# netstat -utnlp | grep :4019
tcp6 0 0 :::4019 :::* LISTEN 29688/maxscale
[root@host53 ~]#
查看进程
[root@host53 ~]# ps -C maxscale
PID TTY TIME CMD
29688 ? 00:00:00 maxscale
[root@host53 ~]#
停止服务
[root@host53 ~]# ps -C maxscale
PID TTY TIME CMD
29688 ? 00:00:00 maxscale
[root@host53 ~]# kill -9 29688
[root@host53 ~]#
[root@host53 ~]#
[root@host53 ~]# kill -9 29688
-bash: kill: (29688) - 进程不存在
2.2.3 测试配置
A 在本机访问管理管端口查看监控状态
[root@host53 ~]# maxadmin -P4019 -uadmin -pmariadb
MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.4.51 | 3306 | 0 | Master, Running
server2 | 192.168.4.52 | 3306 | 0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
MaxScale> exit
[root@host53 ~]#
b 客户端访问数据读写分离服务器
]#which mysql
]# mysql -h192.168.4.53 -P4006 -uwebuser -p123453
mysql> select @@hostname;
mysql> 执行插入或查询 ( 在51 和 52 本机查看记录)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2.2 配置mysql多实例
要求:在主机192.168.4.53配置mysql多实例:
运行2个数据库服务
第1个数据库服务 数据库目录 /dataone
服务端口号 3307
sock文件 /dataone/mysqld.sock
日志文件 /dataone/mysqld.log
第2个数据库服务
数据库目录 /datatow
服务端口号 3308
sock文件 /datatwo/mysqld.sock
日志文件 /datatwo/mysqld.log
1 环境准备
netstat -utnalp | grep :3307
netstat -utnalp | grep :3308
2 安装提供多实例服务的, mysql数据库服务软件
[root@host53 ~]# mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql
[root@host53 ~]#
[root@host53 ~]# ls /usr/local/mysql/
bin COPYING docs include lib man README share support-files
[root@host53 ~]# ls /usr/local/mysql/bin/
innochecksum mysqladmin mysqld_multi mysqlpump mysqlxtest
lz4_decompress mysqlbinlog mysqld_safe mysql_secure_installation perror
myisamchk mysqlcheck mysqldump mysqlshow replace
myisam_ftdump mysql_client_test_embedded mysqldumpslow mysqlslap resolveip
myisamlog mysql_config mysql_embedded mysql_ssl_rsa_setup
resolve_stack_dump
myisampack mysql_config_editor mysqlimport mysqltest_embedded
zlib_decompress
my_print_defaults mysqld mysql_install_db mysql_tzinfo_to_sql
mysql mysqld-debug mysql_plugin mysql_upgrade
[root@host53 ~]#
[root@host53 ~]# echo "export PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile
[root@host53 ~]# source /etc/profile
[root@host53 ~]# echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
配置多实例
装包
tar -zxf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
移动改名
rm -rf /var/lib/mysql
mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql
[root@host53 ~]# ls /usr/local/mysql/
bin COPYING docs include lib man README share support-files
[root@host53 ~]# ls /usr/local/mysql/bin/
innochecksum mysqladmin mysqld_multi mysqlpump mysqlxtest
lz4_decompress mysqlbinlog mysqld_safe mysql_secure_installation perror
myisamchk mysqlcheck mysqldump mysqlshow replace
myisam_ftdump mysql_client_test_embedded mysqldumpslow mysqlslap resolveip
myisamlog mysql_config mysql_embedded mysql_ssl_rsa_setup
resolve_stack_dump
myisampack mysql_config_editor mysqlimport mysqltest_embedded
zlib_decompress
my_print_defaults mysqld mysql_install_db mysql_tzinfo_to_sql
mysql mysqld-debug mysql_plugin mysql_upgrade
[root@host53 ~]# echo "export PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile
[root@host53 ~]# source /etc/profile
[root@host53 ~]# echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
编辑配置文件
]# rm -rf /etc/my.cnf
]#vim /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin user = root
[mysqld1]
port=3307
datadir=/dataone
socket=/dataone/mysqld.sock
log-error=/dataone/mysqld.log
pid-file=/dataone/mysqld.pid
[mysqld2]
port=3308
datadir=/datatwo
socket=/datatwo/mysqld.sock
log-error=/datatwo/mysqld.log
pid-file=/datatwo/mysqld.pid
:wq
4 根据配置文件的设置,做相应的配置
4.1创建数据库目录
4.2创建进程运行的所有者和组 mysql
[root@host53 ~]# mkdir -p /dataone
[root@host53 ~]# mkdir -p /datatwo
[root@host53 ~]# useradd mysql
c[root@host53 ~]# chown mysql:mysql /data*
4.3 初始化授权库
]#mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/dataone --initialize
2018-05-05T08:47:48.992696Z 1 [Note] A temporary password is generated for root@localhost:
bXk.5j!pjto#
[root@host53 ~]# ls /dataone/
auto.cnf ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1 mysql performance_schema sys
]#mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/datatwo --initialize
2018-05-05T08:50:09.429934Z 1 [Note] A temporary password is generated for root@localhost:
bKsaf+xzk0V3
[root@host53 ~]# ls /datatwo/
auto.cnf ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1 mysql performance_schema sys
[root@host53 ~]#
5 启动多实例服务
[root@host53 ~]# mysqld_multi start 1
[root@host53 ~]# mysqld_multi start 2
[root@host53 ~]# netstat -utnlp | grep :3308
tcp6 0 0 :::3308 :::* LISTEN 1153/mysqld
[root@host53 ~]# netstat -utnlp | grep :3307
tcp6 0 0 :::3307 :::* LISTEN 927/mysqld
[root@host53 ~]#
6 访问多实例服务
连接实例服务1
[root@host53 ~]#mysql -uroot -p'bXk.5j!pjto#' -S /dataone/mysqld.sock
mysql> ALTER USER user() identified by "123453";
mysql> quit;
]# mysql -uroot -p123453 -S /dataone/mysqld.sock
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql>
连接实例服务2
[root@host53 ~]#mysql -uroot -p'bKsaf+xzk0V3' -S /datatwo/mysqld.sock
mysql> alter user user() identified by "123453";
Query OK, 0 rows affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> quit
Bye
[root@host53 ~]# mysql -uroot -p123453 -S /datatwo/mysqld.sock
停止启动的实例服务
]# mysqld_multi --user=root --password=密码 stop 实例编号
[root@host53 ~]# netstat -utnlp | grep :3307
tcp6 0 0 :::3307 :::* LISTEN 927/mysqld
[root@host53 ~]#
[root@host53 ~]#
[root@host53 ~]# netstat -utnlp | grep :3308
tcp6 0 0 :::3308 :::* LISTEN 1153/mysqld
[root@host53 ~]#
[root@host53 ~]# mysqld_multi --user=root --password=123453 stop 1
[root@host53 ~]#
[root@host53 ~]# netstat -utnlp | grep :3307
[root@host53 ~]#
[root@host53 ~]# netstat -utnlp | grep :3308
tcp6 0 0 :::3308 :::* LISTEN 1153/mysqld
[root@host53 ~]#
[root@host53 ~]#
[root@host53 ~]#
[root@host53 ~]# mysqld_multi --user=root --password=123453 stop 2
[root@host53 ~]# netstat -utnlp | grep :3308
[root@host53 ~]# mysql -uroot -p123453 -S /datatwo/mysqld.sock
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/datatwo/mysqld.sock' (2)
[root@host53 ~]#
+++++++++++++++++++++++++++++++++++++++++++++++
三、mysql优化
程序员编写的对数据访问的sql命令复杂,导致数据库服务处理的,启用mysql服务的慢查询日志,记录超过指定时间查询结果的sql命令
错误日志 记录启动 / 运行 / 停止过程中的错误消息 log-error[=name]
查询日志 记录客户端连接和查询操作 general-log general-log-file=
慢查询日志 记录耗时较长或不使用索引的查询操作 slow-query-log slow-query-log-file= long-query-time=
slow-query-log 启用慢查询
slow-query-log-file 指定慢查询日志文件
long-query-time 超过指定秒数(默认 10秒)的查询才被记录
log-queries-not-using-indexes 记录未使用索引的查询
启用慢查询日志
vim /etc/my.cnf
[mysqld]
slow-query-loglong-query-time=2
log-queries-not-using-indexes
:wq
]# systemctl restart mysqld
]# mysql -uroot -p123453
mysql> select sleep(3);
mysql> select sleep(5);
查看日志文件内容
]# cat /var/lib/mysql/主机名-slow.log
统计日志文件记录信息
~]# mysqldumpslow /var/lib/mysql/db55-slow.log > /tmp/sql.txt
启用查询日志
vim /etc/my.cnf
[mysqld]
general-log
]# systemctl restart mysqld
]# cat /var/lib/mysql/db55.log
mysql> show variables like "query_cache%"; 查询缓存
+------------------------------+---------+
| Variable_name | Value |
+------------------------------+---------+
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 1048576 |
| query_cache_type | OFF |
| query_cache_wlock_invalidate | OFF |
+------------------------------+---------+
query_cache_wlock_invalidate | OFF 查询缓存结果有效 对myisam存储引擎的表有效,控制脏读
mysql> show global status like "qcache%";
+-------------------------+---------+
| Variable_name | Value |
+-------------------------+---------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 1031832 |
| Qcache_hits | 0 | 记录在查询缓存里查找的数据的次数
| Qcache_inserts | 0 | 记录数据库服务器接受查询请求的次数
| Qcache_lowmem_prunes | 0 | 记录清除查询缓存空间里数据的次数
| Qcache_not_cached | 1 |
| Qcache_queries_in_cache | 0 |
| Qcache_total_blocks | 1 |
+-------------------------+---------+