diff --git a/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java b/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java
index cb23f30..a01f545 100644
--- a/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java
+++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java
@@ -43,8 +43,10 @@
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.Map;
 import java.util.Properties;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.kylin.shaded.com.google.common.base.Strings;
@@ -73,6 +75,8 @@
     // thread-local instances, will override SYS_ENV_INSTANCE
     private static transient InternalThreadLocal<KylinConfig> THREAD_ENV_INSTANCE = new InternalThreadLocal<>();
 
+    public static final Set<String> BLACK_LIST = new HashSet<>();
+
     static {
         /*
          * Make Calcite to work with Unicode.
@@ -92,6 +96,7 @@
         System.setProperty("saffron.default.nationalcharset", NATIVE_UTF16_CHARSET_NAME);
         System.setProperty("saffron.default.collation.name", NATIVE_UTF16_CHARSET_NAME + "$en_US");
 
+        BLACK_LIST.add("kylin.metadata.url");
     }
 
     public static File getKylinHomeAtBestEffort() {
@@ -540,7 +545,7 @@
     }
 
     public String exportAllToString() {
-        final Properties allProps = getProperties(null);
+        final Properties allProps = getAllProperties();
         final OrderedProperties orderedProperties = KylinConfig.buildSiteOrderedProps();
 
         for (Map.Entry<Object, Object> entry : allProps.entrySet()) {
@@ -559,7 +564,9 @@
 
         final StringBuilder sb = new StringBuilder();
         for (Map.Entry<String, String> entry : orderedProperties.entrySet()) {
-            sb.append(entry.getKey() + "=" + entry.getValue()).append('\n');
+            if (BLACK_LIST.contains(entry.getKey()) == false) {
+                sb.append(entry.getKey() + "=" + entry.getValue()).append('\n');
+            }
         }
         return sb.toString();
 
