schema在数据库中表示的是数据库对象集合,它包含了各种对像,比如:表,视图,存储过程,索引等等。
一般情况下一个用户对应一个集合,为了区分不同的集合就需要给不同的集合起名字。用户的schema名就相当于用户名,并作为该用户缺省schema。
所以说,schema集合看上去像用户名。例如,当访问一个数据表时,如果该表没有指明属于哪个schema,系统就会自动的加上缺省的schema。
(1)mysqlschema数据库同步扩展阅读
Schema的创建在不同的数据库中要创建的Schema方法是不一样的,但是它们有一个共同的特点就是都支持CREATE SCHEMA语句。
在MySQL数据库中,可以通过CREATE SCHEMA语句来创建一个数据库Oracle Database在Oracle中,由于数据库用户已经创建了一个模式,所以,CREATE SCHEMA语句创建的是一个schema,它允许将schema同表和视图关联起来,并在这些多个事务中发出多个SQL语句。
SQL Server在SQL Server中,CREATE SCHEMA会按照名称来创建一个模式,与MySQL不同,CREATE SCHEMA语句创建了一个单独定义到数据库的模式。和Oracle数据库也有不同,它实际上创建了一个模式,而且一旦创建了模式,就可以往模式中添加用户和对象。
B. mysql主从数据库不同步的2种解决方法
今天发现Mysql的主从数据库没有同步
先上Master库:
mysql>show
processlist;
查看下进程是否Sleep太多。发现很正常。
show
master
status;
也正常。
mysql>
show
master
status;
+-------------------+----------+--------------+-------------------------------+
|
File
|
Position
|
Binlog_Do_DB
|
Binlog_Ignore_DB
|
+-------------------+----------+--------------+-------------------------------+
|
mysqld-bin.000001
|
3260
|
|
mysql,test,information_schema
|
+-------------------+----------+--------------+-------------------------------+
1
row
in
set
(0.00
sec)
再到Slave上查看
mysql>
show
slave
status\G
Slave_IO_Running:
Yes
Slave_SQL_Running:
No
可见是Slave不同步
下面介绍两种解决方法:
方法一:忽略错误后,继续同步
该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况
解决:
stop
slave;
#表示跳过一步错误,后面的数字可变
set
global
sql_slave_skip_counter
=1;
start
slave;
之后再用mysql>
show
slave
status\G
查看:
Slave_IO_Running:
Yes
Slave_SQL_Running:
Yes
ok,现在主从同步状态正常了。。。
方式二:重新做主从,完全同步
该方法适用于主从库数据相差较大,或者要求数据完全统一的情况
解决步骤如下:
1.先进入主库,进行锁表,防止数据写入
使用命令:
mysql>
flush
tables
with
read
lock;
注意:该处是锁定为只读状态,语句不区分大小写
2.进行数据备份
#把数据备份到mysql.bak.sql文件
[root@server01
mysql]#mysqlmp
-uroot
-p
-hlocalhost
>
mysql.bak.sql
这里注意一点:数据库备份一定要定期进行,可以用shell脚本或者python脚本,都比较方便,确保数据万无一失
3.查看master
状态
mysql>
show
master
status;
+-------------------+----------+--------------+-------------------------------+
|
File
|
Position
|
Binlog_Do_DB
|
Binlog_Ignore_DB
|
+-------------------+----------+--------------+-------------------------------+
|
mysqld-bin.000001
|
3260
|
|
mysql,test,information_schema
|
+-------------------+----------+--------------+-------------------------------+
1
row
in
set
(0.00
sec)
4.把mysql备份文件传到从库机器,进行数据恢复
#使用scp命令
[root@server01
mysql]#
scp
mysql.bak.sql
[email protected]:/tmp/
5.停止从库的状态
mysql>
stop
slave;
6.然后到从库执行mysql命令,导入数据备份
mysql>
source
/tmp/mysql.bak.sql
7.设置从库同步,注意该处的同步点,就是主库show
master
status信息里的|
File|
Position两项
change
master
to
master_host
=
'192.168.128.100',
master_user
=
'rsync',
master_port=3306,
master_password='',
master_log_file
=
'mysqld-bin.000001',
master_log_pos=3260;
8.重新开启从同步
mysql>
stop
slave;
9.查看同步状态
mysql>
show
slave
status\G
查看:
Slave_IO_Running:
Yes
Slave_SQL_Running:
Yes
好了,同步完成啦。
C. 如何设置Mysql同步 分享修改删除
流程:
1:在mysql下找到my.ini文件,在其[mysqld] 下添加主服务器端配置:
server-id=1 #服务器 idlog-bin=C:Program FilesMySQLMySQL Server 5.5mysql-bin #二进制文件存放路径binlog-do-db=test1 #待同步的数据库binlog-ignore-db=information_schema #忽略不同步的数据库,这个可以不用写binlog-ignore-db=mysql #忽略不同步的数据库,这个可以不用写binlog-ignore-db=test #忽略不同步的数据库,这个可以不用写
2:保存my.ini文件,重启数据库,然后会在C:Program FilesMySQLMySQL Server 5.5 下看到mysql-bin.index 文件和mysql-bin.000001文件;
3:通过cmd进入mysql:cd C:Program FilesMySQLMySQL Server 5.5in
输入用户名和密码:mysql -u用户名 -p密码 ( mysql -uroot -proot )
4:给要连接的从服务器设置权限:grant replication slave,reload,super on *.* [email protected] identified by '123456'; ps: 给主机192.168.1.193添加权限,用户名:slave,密码:123456;(只需输入一次就可以了)
5:输入命令 show master status; # 找到File 和 Position 的值记录下来;
其实,主服务器是不需要设置太多信息的,只需要第1条中的前三行就足够了。
下面配置从服务器:
1:在mysql下找到my.ini文件,在其[mysqld] 下添加从服务器端配置:
server-id=2 #服务器 id ,不能和主服务器一致replicate-do-db=test1 #待同步的数据库binlog-ignore-db=information_schema #忽略不同步的数据库,这个可以不用写binlog-ignore-db=mysql #忽略不同步的数据库,这个可以不用写binlog-ignore-db=mysql #忽略不同步的数据库,这个可以不用写binlog-ignore-db=test #忽略不同步的数据库,这个可以不用写
2:保存my.ini文件,重启从数据库,在mysql5.1以上版本中是不支持1中master设置的,如果添加了master设置,数据库就无法重启了;
3:通过cmd进入mysql:cd C:Program FilesMySQLMySQL Server 5.5in
4:从服务器上测试:mysql -u slave -p 123456 -h 192.168.1.192,查看能否连接主数据库成功,如果成功,则一定要退出来,之前我就是一直犯了一个错误,按照网上的步骤测试完毕之后就没有退出mysql,结果执行以下步骤时老是报错,其原因是一直设置的是主数据库;
5:修改对主数据库的连接的参数:mysql>change master to master_host='192.168.1.193',master_user='slave2',master_password='1234562', master_log_file='mysql-bin.000001',master_log_pos=107; ps:可能会报一个错误,大概的意思是说slave线程正在运行,不能设置,这样的话,执行mysql>stop slave; 停止slave线程,然后再设置连接的参数;
6:设置完之后,执行 mysql> start slave; 开启slave线程;执行mysql> show slave statusG (没有分号),查看
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
其实原因很简单,测试连接主数据库之后没有退出来,造成接下来的所有步骤都是对主数据库的操作;
其实主主同步也是相同的配置,只是相互为主机和从机的设置;
D. 如何在两台服务器之间安全迁移MySQL数据库
迁移MySQL数据库通常只需要几个简单的步骤,但是由于您要转移的数据量可能比较庞大,因此一般耗时也会比较长。
下面的步骤将指导您如何从旧的服务器上导出MySQL数据库,对它进行安全加固;然后将其复制并导入到新的服务器上,以保证数据的完整。
将MySQL数据库导出至转储文件(mp file)
Oracle提供了一个名为mysqlmp的工具,允许您轻松地将数据库结构和其数据导出到一个SQL的转储文件。您可以使用如下的命令:
1.mysqlmp -u root -p --opt [database name] > [database name].sql
不过,请注意如下几点:
我们可以使用--single-transaction的标志,以避免数据库在导出数据的过程中被锁死。这样能够在将数据导出到转储文件的同时,您仍可继续在旧的数据库上更新数据。不过请注意,那些在导出进程已经开始之后被更新的数据,是不会被导入转储文件之中的。
在运行该命令之前,请务必将[database name]替换成您的实际数据库名称。
请输入您自己的用户名和相对应的密码,并确保该用户具有备份数据库所需的权限。
安全加固备份文件
在大多数情况下,数据是一家企业的最重要的资产。因此,我们不希望数据库的各种备份被暴露在不受保护的服务器上,因为这样有可能会造成错误地泄露,甚至会出现被黑客窃取等更为糟糕的状况。
因此,通常您可以尝试的做法是:压缩、加密文件,然后删除原文件。在Linux操作系统上,请使用以下的命令对已压缩文件进行加密:
1.zip --encrypt mp.zip db.sql
在压缩开始之前,系统将提示您输入密码。
传输备份文件
至此,我们已经获得了一个加密的转储文件。下面让我们通过网络使用SCP命令,将其传输到新的服务器上:
1.scp /path/to/source-file user@host:/path/to/destination-folder/
将MySQL转储导入新服务器
通过上面一步,我们已将备份文件传到了新的服务器上,下面让我们来进行解密和提取:
1.unzip -P your-password mp.zip
为了存储空间和安全方面的原因,一旦文件导入成功,请记得删除其对应的转储文件。
您可以使用以下的命令来导入文件:
1.mysql -u root -p newdatabase < /path/to/newdatabase.sql
在新服务器上验证导入的数据
现在我们在新服务器上已经导入了数据库,那么我们就需要一种方法来验证数据的真实存在,并确保没有任何遗漏。
我建议您同时在旧的和新的数据库上运行如下查询,并将获得的结果进行对比。
该查询会在所有的表里计算行数,以显示出新、旧数据库中的数据量。
1.SELECT
2.TABLE_NAME,
3.TABLE_ROWS
4.FROM
`
5.information_schema`.`tables`
6.WHERE
`
7.table_schema` = 'YOUR_DB_NAME';
此外,我建议您检查各个表中数字列的MIN和MAX记录,以确保数据本身是有效的,而不仅仅是看数据的总量(虽然这是查询所唯一能够读出的值)。另一种可供测试的选择是将数据库从新的服务器导出为SQL转储文件,并将其与旧服务器的SQL转储文件做比较。
此外,在应用程序被迁移之前,我建议您先将一个应用程序的实例重定向到新的数据库上,以确认一切运行正常。
另一种导出和导入的选项
我们之所以把该选项放在最后,是因为我们的确不建议您去使用它。
该方法实现起来非常的容易,因为它仅使用一个命令,便能一次性将转储文件导出、传输、并将其数据导入到新的数据库之中。
而它的不足之处在于,一旦其网络链接断掉,您就需要重新启动它了。
因此,我们认为它并不值得被推荐,尤其是在大型数据库中,可能会非常不适用。
当然,如果您非要尝试一下的话,可以使用如下的命令:
1.mysqlmp -u root -pPassword --all-databases | ssh user@new_host.host.com 'cat - | mysql -u root -pPassword'
重要提示
请确保在新旧两处,安装有相同官方发行版本的MySQL服务器。否则,你需要按照MySQL网站上的升级说明来进行统一(请参见(https://dev.mysql.com/doc/refman/5.7/en/upgrading.html)。
请确保您在旧的服务器上拥有足够的空间来保存转储文件和压缩文件(应该有db_size×2的空间)。
请确保您在新的服务器上拥有足够的空间来保存加密的和解密的转储文件、并能导入数据库(应该有db_size×3的空间)。
如果您曾经考虑过只是将datadir从一个数据库转移到另一个的话,我建议您最好不要这样做。否则,您会搞乱数据库的内部结构,而且会给将来可能的问题埋下隐患。
在新的服务器配置中,请不要忘了配置诸如innodb_log_file_size这样的重要标志。因为如果忘记了根据新服务器的规格而更新配置的话,很可能会导致严重的性能问题。
在许多情况下,一般升级到新的数据库服务器的初衷是为了提高查询性能。而如果此类升级没有达到预期的改善,那么您就应该考虑去优化SQL查询,而不仅仅是升级硬件那么简单了
E. 如何设置MySQL同步
流程:
1:在mysql下找到my.ini文件,在其[mysqld] 下添加主服务器端配置:
server-id=1 #服务器 id
log-bin=C:Program FilesMySQLMySQL Server 5.5mysql-bin #二进制文件存放路径
binlog-do-db=test1 #待同步的数据库
binlog-ignore-db=information_schema #忽略不同步的数据库,这个可以不用写
binlog-ignore-db=mysql #忽略不同步的数据库,这个可以不用写
binlog-ignore-db=test #忽略不同步的数据库,这个可以不用写
2:保存my.ini文件,重启数据库,然后会在C:Program FilesMySQLMySQL Server 5.5 下看到mysql-bin.index 文件和mysql-bin.000001文件;
3:通过cmd进入mysql:cd C:Program FilesMySQLMySQL Server 5.5in
输入用户名和密码:mysql -u用户名 -p密码 ( mysql -uroot -proot )
4:给要连接的从服务器设置权限:grant replication slave,reload,super on *.* [email protected] identified by '123456'; ps: 给主机192.168.1.193添加权限,用户名:slave,密码:123456;(只需输入一次就可以了)
5:输入命令 show master status; # 找到File 和 Position 的值记录下来;
其实,主服务器是不需要设置太多信息的,只需要第1条中的前三行就足够了。
下面配置从服务器:
1:在mysql下找到my.ini文件,在其[mysqld] 下添加从服务器端配置:
server-id=2 #服务器 id ,不能和主服务器一致
replicate-do-db=test1 #待同步的数据库
binlog-ignore-db=information_schema #忽略不同步的数据库,这个可以不用写
binlog-ignore-db=mysql #忽略不同步的数据库,这个可以不用写
binlog-ignore-db=mysql #忽略不同步的数据库,这个可以不用写
binlog-ignore-db=test #忽略不同步的数据库,这个可以不用写
2:保存my.ini文件,重启从数据库,在mysql5.1以上版本中是不支持1中master设置的,如果添加了master设置,数据库就无法重启了;
3:通过cmd进入mysql:cd C:Program FilesMySQLMySQL Server 5.5in
4:从服务器上测试:mysql -u slave -p 123456 -h 192.168.1.192,查看能否连接主数据库成功,如果成功,则一定要退出来,之前我就是一直犯了一个错误,按照网上的步骤测试完毕之后就没有退出mysql,结果执行以下步骤时老是报错,其原因是一直设置的是主数据库;
5:修改对主数据库的连接的参数:mysql>change master to master_host='192.168.1.193',master_user='slave2',master_password='1234562', master_log_file='mysql-bin.000001',master_log_pos=107; ps:可能会报一个错误,大概的意思是说slave线程正在运行,不能设置,这样的话,执行mysql>stop slave; 停止slave线程,然后再设置连接的参数;
6:设置完之后,执行 mysql> start slave; 开启slave线程;执行mysql> show slave statusG (没有分号),查看
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
其实原因很简单,测试连接主数据库之后没有退出来,造成接下来的所有步骤都是对主数据库的操作;
其实主主同步也是相同的配置,只是相互为主机和从机的设置;
F. 如何实现同一台mysql服务器中不同数据库之间的数据同步
1.主上修改my.cnf文件:
server-id=1
log-bin=mysql-bin
2.从上修改配置文件 my.cnf
server-id=2
relay-log=relay-bin
read-only =1
replicate-ignore-db = mysql
replicate-ignore-db = test
replicate-ignore-db = information_schema
#replicate-wild-do-table = tt.admin
replicate-wild-do-table = my_db.stu // 所要同步的数据库的单个表
3. 创建 同步的用户(主上)
grant replication client,replication slave on *.* to rep@'10.41.50.105' identified by 'root';
4.同步到主库(在从上操作)
change master to master_host='10.41.50.80',master_user='rep',master_password='root';
5.在从上验证:
show slave status\G;
主从同步某些表